【发布时间】:2015-01-20 07:15:51
【问题描述】:
我是新手,所以我首先要说的是,当我查看一些代码时,我意识到这个函数对我来说没有一点意义。
如您所见,此特定函数使用位运算符将 4 个无符号字符元素转换为整数。
//将一个四字符数组转换为整数,使用little-endian形式
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? 为什么这个函数需要位运算符?
这个功能超出了我的理解范围,请解释一下这段代码以及它是如何工作的,或者至少给我一个链接来彻底解释这一点。
我到处寻找解释,但找不到。
这可能有一个足够简单的解释。
【问题讨论】:
-
在比 int 短的类型上使用运算符