数字由 4 个字符组成,十六进制
Number made of 4 chars with hex
我正在用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
位。
相关文章:
- 打印十六进制字符
- 从十六进制字符串转换为十六进制字符数组
- 将十六进制字符数组存储在字节数组中,而无需更改为 ASCII 或其他任何东西
- 如何在C 中的Little Endian中读取来自二进制文件的单独的十六进制字符
- 如何在C++中将十六进制字符转换为二进制
- 未报告的错误VS 2015:十六进制字符说明符
- 如何将十六进制字符数组转换为C 中的字符串
- 十六进制字符数组 2 x 2 个字符以uint8_t
- 从ini文件中读取十六进制字符
- C++将带有十六进制字符的.txt转换为前面带有x的带有六进制字符的txt
- 将十六进制字符馈送到字符串流
- int数字中的十六进制*字符
- 将双rgba颜色值转换为十六进制字符
- 十六进制字符到十进制,并将输出存储为字符
- 字符串到十六进制字符数组
- C/C++ 十六进制字符* 到字节数组
- 将字符串化的十六进制字符转换为std::string
- 将十六进制字符值转换为其字符串文本以在流上使用
- 以二进制模式扫描文件,并将十六进制字符解释为C++中的实际数字
- 十六进制字符到std::string的Constexpr转换