Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将C++中的位填充成整数_C++_C_Bit Manipulation - Fatal编程技术网

将C++中的位填充成整数

将C++中的位填充成整数,c++,c,bit-manipulation,C++,C,Bit Manipulation,我想把一个整数的最低两个字节打包成另一个整数,一个被卡住了 for ( int i = 0; i < 8 ; i ++){ if ((bitmask & ( 1 << i))) result |= 1 >> i; } Endian独立解决方案: x = ((y >> 0) & 0xFF) | ((y >> 8) & 0xFF); 如果我理解正确,充分的解

我想把一个整数的最低两个字节打包成另一个整数,一个被卡住了

for ( int i = 0; i < 8 ; i ++){
         if ((bitmask & ( 1 << i)))
             result |= 1 >> i;
     }

Endian独立解决方案:

x = ((y >> 0) & 0xFF) |
    ((y >> 8) & 0xFF);

如果我理解正确,充分的解决方案应该是:

another_integer = first_integer & 0xFFFF // which is 65536, which is 2^16 so 0000000011111111 binary (for 4 byte integer)
这样,您可以通过使用simple AND mask将第一个\u integer的两个较低字节的值分配给另一个\u integer:

0101110011101010
0000000011111111 AND
----------------
0000000011101010

x=y&0xFFFF+x&~0xFFFF@Borleader最低2字节,而不是最低2字节bits@PeterT哦,误读了。不过,在我的辩护中,这个想法是一样的,只是掩码改变了。是的,十进制数更难从中读出位。如果我看到0xF0F0,那么我知道有4位交替开和关,只要看看它,尝试与61680为什么?他在这两种情况下都使用整数类型,因此不可能存在endian问题。@JamesKanze我的意思是其他一些解决方案,如uint8\u t*ptr=uint8\u t*&u int;x=*ptr;ptr++;x |=*ptr;将依赖于endian,因为这样您就不知道ptr会给您ms字节还是ls字节。同样的问题,如果你用1个uint32和4个uint8的并集来解决这个问题。@Lundin-Endian独立的解决方案到底是为了什么?我所看到的是y的最低两个字节被压缩在一起,并分配给x。@Orwellphile,如中所示,y的长度无关紧要。与使用指针算术或联合等的解决方案不同@Lundin True,endianess不会影响结果,但这是因为您自己使用按位or将最低的两个字节压缩为一个字节。它也没有做任何有用的事情,甚至在任何endian格式中都是可逆的。