繁体   English   中英

C ++中的十六进制按位运算

[英]Hex bitwise operation in c++

通过在c ++中使用文件流,我已将二进制文件中的字符串读入缓冲区(4个字节)。 我知道缓冲区包含“ 89abcdef ”。 缓冲区是这样的:

buffer[0] = 89
buffer[1] = ab
buffer[2] = cd
buffer[3] = ef

现在,我想将这些数字恢复为一个十六进制数字0x89abcdef 但是,这并不像我想的那么简单。 我尝试了以下代码:

int num = 0;
num |= buffer[0];
num <<= 24;
cout << num << endl;

此时, num显示为

ea000000

当我对缓冲区的第二个元素尝试相同的算法时:

num = 0;
num |= buffer[1];
num <<= 16;
cout << num << endl;

输出:

ffcd0000

cd前面的ff对我将它们全部加在一起非常不方便(我打算使其看起来像00cd0000 ,并将其添加到第一个num )。

有人可以帮我找回十六进制数字0x89abcdef吗? 谢谢。

直到最后才修改实际数字:

num = buffer [0] << 24 | buffer [1] << 16 | buffer [2] << 8 | buffer [3];

buffer [0] << 24将为您提供第一个结果,该结果将与第二个结果组合,而与第一个结果无关,依此类推。

同样,如前所述,这样的操作应该在无符号数字上进行,以使签名不会干扰结果。

对于所有按位运算,您将要使用unsigned int而不是int。 这样,您就可以避免遇到的各种符号扩展问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM