C 将十六进制值 "\xHH"转换为整数

标签 c formatting hex format-conversion

我想将文件中的十六进制数转换为整数。
该字符串如下所示:
\0\0\x05\xa0
这应该是 1440。如果我尝试:
int i = '\x05'
我得到5

但是如果我对 \xa0 执行相同的操作,我会得到 -96
有什么想法如何正确转换字符串吗?

最佳答案

这看起来像 big-endian数量。

假设您在 unsigned char data[4] 数组中有 4 个字节(不是 12 个字节,就好像您显示的字节是一个字符串;我假设它们是二进制字节),你应该能够像这样转换:

const unsigned int x = (data[0] << 24) | (data[1] << 16) |
                       (data[2] << 8)  | data[3];

如果我们插入您的数据:

const unsigned char data[] = { 0, 0, 0x5, 0xa0 };

上面变成:

const unsigned int x = (0 << 24) | (0 << 16) | (5 << 8) | 160;

这只是256 * 5 | 160 = 1280 | 160 160 = 1440,正如预期的那样。

关于C 将十六进制值 "\xHH"转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15765346/

相关文章:

C代码中的CRLS归并排序边界代码理解

c - 在 OSX 10.12 上使用 mmap() 时出现 'cannot allocate memory' 错误

Excel VBA 显示带有 Afterupdate 和 Change 事件的货币

database - Haskell - 格式问题

python - python 中的 perl hex() 模拟

c++ - C++ std::hex 是否反转字节顺序? (将十进制打印为十六进制)

c++ - glibc 在转换类型 C++ 后检测到 free() 无效的下一个大小(快速)

powershell - 如何将字典列表分解为格式表中的标题

c - 格式化 C 字符串

c - 如何从 C 中的 gtk TreeView /列表存储中获取所有数据?