由 4 个十六进制字符组成的数字

Number made of 4 chars with hex

我正在用 C++ 编程,我遇到了另一个 "stupid" 问题。如果我有 4 个这样的字符:

char a = 0x90
char b = 0x01
char c = 0x00
char d = 0x00

当这一切都意味着十六进制数 0x00000190 即 400 十进制数。 如何将这些字符转换为一个整数?我知道我能做到

int number = a;

但这只会将一个字符转换为整数。有人可以帮忙吗?

像这样

int number = ((d & 0xff) << 24) | ((c &0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff);

<< 是位移运算符, & 0xff 是在表达式中将 char 提升为 int 时避免负值所必需的(Jarod42 完全正确)

您可以使用:

int number = (a & 0xFF)
           | ((b & 0xFF) << 8) 
           | ((c & 0xFF) << 16)
           | ((d & 0xFF) << 24);

使用无符号值会更简单。

这个有效:

unsigned char ua = a;
unsigned char ub = b;
unsigned char uc = c;
unsigned char ud = d;

unsigned long x = ua + ub * 0x100ul + uc * 0x10000ul + ud * 0x1000000ul

它类似于十进制的位值运算,但您使用的是基数 0x100 而不是基数 10。

如果您经常这样做,您可以将其包装在一个内联函数或宏中。


注意 - 到目前为止使用 (char)0x90 上的按位运算发布的其他答案对于普通 char 已签名的系统都是错误的,因为他们忘记了 (char)0x90 是负数值,因此在应用积分提升后,左侧有很多 1 位。