Tag: 低级

有点黑客攻击和模数操作

阅读本文时: http : //graphics.stanford.edu/~seander/bithacks.html#ReverseByteWith64BitsDiv 我来到这句话: 最后一步,涉及模数除以2 ^ 10 – 1,具有将64位的每组10位(从位置0-9,10-19,20-29,…)合并在一起的效果值。 (它是关于反转数字中的位)… 所以我做了一些计算: reverted = (input * 0x0202020202ULL & 0x010884422010ULL) % 1023; b = 74 : 01001010 b * 0x0202020202 : 1000000010000000100000001000000010 = 9494949494 :01001010010010100100101001001010010010100 & 10884422010 :10000100010000100010000100010000000010000 = 84000010 : 10000100000000000000000000010000 % 1023 : 1111111111 = 82 : 01010010 现在,唯一有点不清楚的部分是1023(2 ^ 10 – 1)的大数量模块包装并给我反转位的部分……我没有找到关于位操作和位操作之间关系的任何好文档模运算(除了x % […]

有没有办法为C或C ++结构强制执行特定的字节序?

我已经看到了关于结构的字节序的一些问题和答案,但它们是关于检测系统的字节序,或者在两个不同的字节序之间转换数据。 但是,如果有一种方法可以强制执行给定结构的特定字节顺序,那么我现在想要的是什么。 是否有一些好的编译器指令或其他简单的解决方案,除了重写操作在位域上的许多宏的整个事情? 一般的解决方案会很好,但我也会对特定的gcc解决方案感到满意。 编辑: 感谢所有评论指出为什么强制执行endianness不是一个好主意,但在我的情况下,这正是我需要的。 大量数据由特定处理器生成(永远不会改变,它是带有自定义硬件的嵌入式系统),并且必须由在未知处理器上运行的程序(我正在处理的)读取。 对数据进行字面评估会非常麻烦,因为它包含数百种不同类型的结构,这些结构非常庞大且深入:它们中的大多数都有许多其他巨大的结构层。 改变嵌入式处理器的软件是不可能的。 源是可用的,这就是为什么我打算使用该系统的结构而不是从头开始并按字节方式评估所有数据。 这就是为什么我需要告诉编译器它应该使用哪个字节序,无论效率与否都无关紧要。 它不一定是字节序的真正变化。 即使它只是一个接口,物理上所有东西都是在处理器自己的字节序中处理的,但我完全可以接受。