c++ - 将 unsigned char 转换为 int 和 short

标签 c++ arrays char int

我是新手,所以我首先要说的是,当我查看一些代码时,我意识到这个函数对我来说一点意义都没有。

如您所见,此特定函数使用按位运算符将 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/

相关文章:

c++ - 替换方法改变 QByteArray 的大小

c++ - B-Tree中是否有批量加载的算法?

javascript - 根据值 : Javascript 从对象数组中选择一个属性

mysql - 将 JSON 数组添加到 MYSQL

c++11 - 有没有办法在不修改缓冲区内容的情况下设置 std::string 的长度?

c# - Linux 下 AutoResetEvent 的 C++ 等价物是什么?

c++ - C++可变参数函数对参数进行原位排序

代码在 C 中未按预期工作

将字符串数组字符转换为数字

c++ - 手动设置 char* 的结尾不起作用