将小端转换为大端,包括 0(零)

Posted

技术标签:

【中文标题】将小端转换为大端,包括 0(零)【英文标题】:Convert little endian to big endian including 0 (zero) 【发布时间】:2013-04-20 05:46:24 【问题描述】:

我正在尝试将小端转换为大端并且遇到了麻烦。 我有一个数组,它有 2 个字节的 unsigned char,它是十六进制值。 我想让它变成大端,因为零已经消失了,我无法得到我想要的值。

例如, 我的目标是得到

array[0] = 0b
array[1] = 40
output = 0b40 so i can see this value as 2880 when %d

所以我用了

output = (array[1]>>4) | (array[0]<<4);

但实际上,我明白了

printf("output = %x04\n", output);
output = 00b4

我希望输出为 0b40,这样我可以得到 2880

printf("output = %x\n", output);
output = 0b40

printf("output = %d\n", output);
output = 2880

感谢大家的帮助,我们将不胜感激

【问题讨论】:

【参考方案1】:

您需要将底部向上移动八位,而不是四位,并且不移动顶部:

output = (array[0]<<8) | array[1];

有关更多讨论和代码,请参阅convert big endian to little endian in C。

【讨论】:

以上是关于将小端转换为大端,包括 0(零)的主要内容,如果未能解决你的问题,请参考以下文章

在C中将char从大端转换为小端

flutter大端小端转换

从二进制文件读取时将大端转换为小端

将任何变量从大端转换为小端 - 如何避免空指针?

字节序大端、小端

Linux网络通信