Iam使用C ++进行编程,Iam与另一个"愚蠢的"问题。如果我有4个像这样的字符:
char a = 0x90
char b = 0x01
char c = 0x00
char d = 0x00
当全部表示十六进制数0x00000190时,它是400十进制数。 如何将这些字符转换为一个int?我知道我能做到
int number = a;
但这只会将一个char转换为int。请问有人帮忙吗?
答案 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
位。