gpt4 book ai didi

c - 使用 char 指针读取 int 值并返回它

转载 作者:行者123 更新时间:2023-11-30 17:17:24 25 4
gpt4 key购买 nike

static unsigned int read24(unsigned char *ptr)
{
unsigned int b0;
unsigned int b1;
unsigned int b2;
unsigned int b3;

b0 = *ptr++;
b1 = *ptr++;
b2 = *ptr++;
b3 = *ptr;

return ( ((b0 >> 24) & 0x000000ff) |
((b1 >> 8) & 0x0000ff00) |
((b2 << 8) & 0x00ff0000) |
(b3 << 24) & 0x00000000 // this byte is not important so make it zero
);

}

这里我写了一个函数,并尝试使用 char 指针读取 32 位(4 字节)并返回这 32 位(4 字节)。我怀疑这是否能正常工作。另外,我也使用/浪费吗通过定义 4 个不同的整数变量来占用大量内存?是否有更好的方法来编写这个函数。感谢您抽出时间。

最佳答案

首先,删除 b3,因为您显然打算读取 24 位,所以您甚至不应该尝试访问该额外字节(如果它甚至没有分配怎么办?)。

其次,我认为你的轮类有误。 b0 将始终在 [0..255] 范围内,因此如果您 >> 24,它将变为零。也没有必要屏蔽任何内容,因为您来自 unsigned char,您知道您只会设置 8 位。您可能想要:

return (b0 << 16) | (b1 << 8) | b2;

return (b2 << 16) | (b1 << 8) | b0;

取决于数据的字节顺序。

至于使用这些中间整数,如果你有一个像样的编译器,那没关系(编译器会优化它们)。但是,如果您正在为嵌入式平台编写代码或者编译器的状态较差,则省略中间整数可能会提高您的性能。在这种情况下,不要将多个 ptr++ 放在同一个语句中,而是使用 ptr[n] 以避免多个增量导致未定义的行为。

关于c - 使用 char 指针读取 int 值并返回它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29426731/

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