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

Number made of 4 chars with hex

本文关键字:十六进制 字符 数字      更新时间:2023-10-16

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

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

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

int number = a;

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

您可以使用

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

使用无符号值会更简单。

像这样

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

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

这有效:

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位。