Che*_*zey 5 c++ bit-manipulation
所以我有3个号码.一个是a char,另外两个是int16_t(也称为shorts,但根据表格,我发现短路不会可靠地为16位).
我想将它们连接在一起.所以说它们的价值是:
10010001
1111111111111101
1001011010110101
我想最终得到一个long long包含:
1001000111111111111111011001011010110101000000000000000000000000
使用我在网上找到的一些解决方案,我想出了这个:
long long result;
result = num1;
result = (result << 8) | num2;
result = (result << 24) | num3;
Run Code Online (Sandbox Code Playgroud)
但它不起作用; 当它被解码时,它给了我很奇怪的数字.
如果我的解码代码有问题,这里是:
char num1 = num & 0xff;
int16_t num2 = num << 8 & 0xffff;
int16_t num3 = num << 24 & 0xffff;
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?我怀疑它与a的大小有关long long,但我不能完全绕过它,我想在后面有更多数字的空间.
要根据您的要求获得正确的位模式,您应该使用:
result = num1;
result = (result << 16) | num2;
result = (result << 16) | num3;
result<<=24;
Run Code Online (Sandbox Code Playgroud)
这将产生您请求的精确位模式,lsb-end左侧的24位0:
1001000111111111111111011001011010110101000000000000000000000000
Run Code Online (Sandbox Code Playgroud)