我想将一个整数的最低两个字节打包到另一个整数中,但目前卡住了。
for ( int i = 0; i < 8 ; i ++){
if ((bitmask & ( 1 << i)))
result |= 1 >> i;
}
for ( int i = 0; i < 8 ; i ++){
if ((bitmask & ( 1 << i)))
result |= 1 >> i;
}
与字节序无关的解决方案:
x = ((y >> 0) & 0xFF) |
((y >> 8) & 0xFF);
uint8_t* ptr = (uint8_t*)&the_int; x = *ptr; ptr++; x |= *ptr;
这样的其他解决方案会受到大小端的影响,因为你不知道 ptr
是否会给你最高位字节或最低位字节。如果你通过将1个 uint32_t 和 4个 uint8_t 组成一个联合来解决问题,那么同样存在这个问题。 - Lundiny
的字节序并不重要。 - Lundinanother_integer = first_integer & 0xFFFF // which is 65536, which is 2^16 so 0000000011111111 binary (for 4 byte integer)
0101110011101010
0000000011111111 AND
----------------
0000000011101010
0xF0F0
,我知道只需看它就有4个交替开关的位,但用61680试试看。 - PeterT