gpt4 book ai didi

更改 3 字节整数的字节顺序

转载 作者:太空狗 更新时间:2023-10-29 15:58:10 24 4
gpt4 key购买 nike

我收到一个 3 字节的整数,我将其存储在一个数组中。现在,假设数组是 unsigned char myarray[3]

通常,我会使用以下方法将其转换为标准的 int:

int mynum = ((myarray[2] << 16) | (myarray[1] << 8) | (myarray[0]));

但是,在执行此操作之前,我需要将数据从网络字节顺序转换为主机字节顺序。

所以,我将上面的内容更改为(它是 0-1-2,但它是 n 到 h,所以 0-2-1 是我想要的):

int mynum = ((myarray[1] << 16) | (myarray[2] << 8) | (myarray[0]));

但是,这似乎行不通。对于我的生活无法弄清楚。我已经看了这么多,以至于在这一点上我觉得我被炸了,只是把自己弄糊涂了。我做的对吗?有没有更好的办法?以下是否可行?

int mynum = ((myarray[2] << 16) | (myarray[1] << 8) | (myarray[0]));
int correctnum = ntohl(mynum);

最佳答案

这是另一个想法。为什么不让它结构化并明确说明您在做什么。您遇到的一些困惑可能源于“我存储在数组中”的前提。相反,如果您定义了

typedef struct {
u8 highByte;
u8 midByte;
u8 lowByte;
} ThreeByteInt;

要将它变成一个整数,你只需要做

u32 ThreeByteTo32(ThreeByteInt *bytes) {
return (bytes->highByte << 16) + (bytes->midByte << 8) + (bytes->lowByte);
}

关于更改 3 字节整数的字节顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23934560/

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