我有一个十六进制值的字符数组,想将它们转换成一个整数值。我目前使用的代码有两个问题:
问题 1:运行后存储在 strHex 中的值是 - “0927ffffffc0”,而我希望它是“000927C0” - 添加额外的“ffffff”的原因是什么?
问题 2: 我想要一个解决方案,将十六进制值的 char 数组转换为整数,如果可能的话不使用 stringstream。
char cArray[4] = { 0x00, 0x09, 0x27, 0xC0 }; // (600000 in decimal)
std::stringstream ss;
for (int i = 0; i < 4; ++i)
{
ss << std::hex << (int)cArray[i];
}
std::string strHex = ss.str();
int nHexNumber;
sscanf(strHex.c_str(), "%x", &nHexNumber);
nHexNumber 转换后应该是 600000,它给了我 -64。
最佳答案
#include <stdint.h>
#include <iostream>
int main(int argc, char *argv[]) {
unsigned char cArray[4] = { 0x00, 0x09, 0x27, 0xC0 };
uint32_t nHexNumber = (cArray[0] << 24) | (cArray[1] << 16) | (cArray[2] << 8) | (cArray[3]);
std::cout << std::hex << nHexNumber << std::endl;
return 0;
}
已编辑: 正如 M.M 所指出的这不取决于 endianness如最初所述。
QEMU下的输出:
user@debian-powerpc:~$ uname -a
Linux debian-powerpc 3.2.0-4-powerpc #1 Debian 3.2.51-1 ppc GNU/Linux
user@debian-powerpc:~$ ./a.out
927c0
user@debian-powerpc:~$
在 Windows 上的 Ubuntu 下:
leus@owl:~$ uname -a
Linux owl 4.4.0-43-Microsoft #1-Microsoft Wed Dec 31 14:42:53 PST 2014 x86_64 x86_64 x86_64 GNU/Linux
leus@owl:~$ ./a.out
927c0
leus@owl:~$
关于c++ - 如何在 C++ 中将十六进制值的字符数组转换为单个整数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50937194/