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

时间:2015-01-29 20:32:04

标签: c++ char int hex

Iam使用C ++进行编程,Iam与另一个"愚蠢的"问题。如果我有4个像这样的字符:

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

当全部表示十六进制数0x00000190时,它是400十进制数。 如何将这些字符转换为一个int?我知道我能做到

int number = a;

但这只会将一个char转换为int。请问有人帮忙吗?

3 个答案:

答案 0 :(得分:2)

您可以使用:

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

使用无符号值会更简单。

答案 1 :(得分:1)

像这样

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

<<是位移运算符,& 0xff是在表达式中将char提升为int时必须避免的负值(完全由Jarod42提供)< / p>

答案 2 :(得分:0)

这有效:

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