我是新手,所以我首先要说的是,当我查看一些代码时,我意识到这个函数对我来说一点意义都没有。
如您所见,此特定函数使用按位运算符将 4 个无符号 char 元素转换为整数。
//使用小端形式将一个四字符数组转换为一个整数
int toInt(const char* bytes) {
return (int)(((unsigned char)bytes[3] << 24) |
((unsigned char)bytes[2] << 16) |
((unsigned char)bytes[1] << 8) |
(unsigned char)bytes[0]);
}
short toShort(const char* bytes) {
return (short)(((unsigned char)bytes[1] << 8) |
(unsigned char)bytes[0]);
}
我已经知道按位运算符如何使用以及 char 如何使用 1 个字节而 int 如何使用 4 个字节。为什么将 char 位向左移动 24 位而不是直接将其显式转换为 int 并将其转换为 int? 为什么这个函数需要按位运算符?
这个函数超出了我的理解范围,请解释这段代码及其工作原理,或者至少给我一个链接来彻底解释这个。
我到处找解释,但没找到。
这可能有一个足够简单的解释。
最佳答案
Why is bitwise operators necessary for this function?
按位运算符用于将四个单字节数字“组装”成四字节数字。
假设您有四个 8 位数字,如下所示:
aaaaaaaa
bbbbbbbb
cccccccc
dddddddd
轮类给你这个:
aaaaaaaa000000000000000000000000
00000000bbbbbbbb0000000000000000
0000000000000000cccccccc00000000
000000000000000000000000dddddddd
按位运算符 OR
可让您从这四个部分中生成一个数字,因为 OR
将任何位 x
与零生成 x
。如果您像上面所示对齐四字节数字,则每个位置只有一个非零位,因此按位 OR
会产生所需的结果:
aaaaaaaabbbbbbbbccccccccdddddddd
关于c++ - 将 unsigned char 转换为 int 和 short,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27073283/