gpt4 book ai didi

c++ - 如何将值从主机字节顺序转换为小端字节序?

转载 作者:可可西里 更新时间:2023-11-01 16:29:29 26 4
gpt4 key购买 nike

我需要将短值从主机字节顺序转换为小端字节序。如果目标是 big endian,我可以使用 htons() 函数,但可惜 - 它不是。

我想我可以:

swap(htons(val))

但这可能会导致字节被交换两次,使结果正确,但会给我带来性能损失,这在我的情况下是不合适的。

最佳答案

这是一篇关于字节顺序以及如何从 IBM 确定它的文章:

Writing endian-independent code in C: Don't let endianness "byte" you

它包括一个如何在运行时确定字节顺序的示例(您只需要执行一次)

const int i = 1;
#define is_bigendian() ( (*(char*)&i) == 0 )

int main(void) {
int val;
char *ptr;
ptr = (char*) &val;
val = 0x12345678;
if (is_bigendian()) {
printf(“%X.%X.%X.%X\n", u.c[0], u.c[1], u.c[2], u.c[3]);
} else {
printf(“%X.%X.%X.%X\n", u.c[3], u.c[2], u.c[1], u.c[0]);
}
exit(0);
}

该页面还有一个关于反转字节顺序的方法的部分:

short reverseShort (short s) {
unsigned char c1, c2;

if (is_bigendian()) {
return s;
} else {
c1 = s & 255;
c2 = (s >> 8) & 255;

return (c1 << 8) + c2;
}
}

;

short reverseShort (char *c) {
short s;
char *p = (char *)&s;

if (is_bigendian()) {
p[0] = c[0];
p[1] = c[1];
} else {
p[0] = c[1];
p[1] = c[0];
}

return s;
}

关于c++ - 如何将值从主机字节顺序转换为小端字节序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1873352/

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