gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:30:58 42 4
gpt4 key购买 nike

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

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

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com