c++ - 如何在 C++ 中将十六进制值的字符数组转换为单个整数值?

标签 c++ arrays char hex

我有一个十六进制值的字符数组,想将它们转换成一个整数值。我目前使用的代码有两个问题:

问题 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/

相关文章:

c++ - 如何从不同头文件中的类继承?

c - 如何在编码和解码时正确处理文件?

c - 如何在 c 中输入字符时排除 'enter'?

javascript - 使用 Lodash 展平对象数组并通过重复日期获取唯一键和值?

python - 在 while 循环中追加数组

将 char 与整数进行比较

c++ - 如何使用 boost 异常将信息添加到 std::exception

c++ - 如何在启用 C++11 的情况下在 xcode 4.6.2 中编译 <functional>

c++ - 具有对象指针的对象 vector

c++ - 当数组超出范围时,通过异常检查是否安全?