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
会为您提供第一个结果,该结果与独立于第一个结果的第二个结果相结合,依此类推。
此外,如前所述,此类操作应在无符号号码上完成,以便签名不会干扰结果。
对于所有按位运算,您将需要使用无符号 int 而不是 int。通过这种方式,您可以避免您看到的各种符号扩展问题。
相关文章:
- 如何在openssl-ecc中获取十六进制格式的私钥
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 通过错误处理,在C++中可靠地获得用户十六进制输入
- 为什么mpfr_printf与十六进制浮点(%a转换说明符)的printf不同
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 指向存储在字符串 c++ 中的十六进制
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- C ++如何使用UTF8十六进制代码打印UTF8符号?
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 如何在C++中将十六进制字符串转换为文本数据
- 使用 sprintf 将十六进制0xAABBCC转换为字符串"AA:BB:CC"
- 绝对编码器十六进制输入
- 为什么C++总是显示十六进制内存地址,而不仅仅是整数?
- C++17 十六进制浮点文字单精度后缀冲突?
- 是否可以在C++中获取 CHAR 的有效十六进制地址?
- 打印十六进制字符
- C++ 中的十六进制按位运算