gpt4 book ai didi

c - 将 unsigned char 移动超过 8 位

转载 作者:行者123 更新时间:2023-12-02 19:23:47 24 4
gpt4 key购买 nike

这段代码让我有点困扰:

typedef struct _slink{
struct _slink* next;
char type;
void* data;
}

假设这描述的是一个文件中的链接,其中数据是 4 个字节长,表示一个地址或一个整数(取决于链接的类型)

现在我正在考虑将文件中的数字从小端重新格式化为大端,所以我想做的是在写回文件之前更改字节的顺序,即对于 0x01020304,我想将它转换为 0x04030201 所以当我写回它时,它的小端表示将看起来像 0x01020304 的大端表示>,我通过将 i'th 字节乘以 2^8*(3-i) 来实现,其中 i 介于 0 和3. 现在这是它的一种实现方式,这里让我感到困扰的是,这是将字节移动超过 8 位..(L 是 _slink* 类型)

int data = ((unsigned char*)&L->data)[0]<<24) + ((unsigned char*)&L->data)[1]<<16) + 
((unsigned char*)&L->data)[2]<<8) + ((unsigned char*)&L->data)[3]<<0)

谁能解释一下为什么这真的有效?没有明确地将这些字节转换为整数开始(因为它们只有 1 个字节,但最多移动 24 位)提前致谢。

最佳答案

在表达式中使用时,任何小于 int 的整数类型都被提升int 类型。

因此,移位实际上应用于 int 类型的表达式,而不是 char 类型。

关于c - 将 unsigned char 移动超过 8 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62666302/

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