首页 > 解决方案 > 在结构数组上交换字节顺序字节序,或将 2 个字节组合成一个单词

问题描述

我想读取二进制文件的头文件,现在只打印一些值。代码是大端。我的电脑小端。结构有单词和字符串。我设法从文件中读取,但输出错误。

样本字节为 02 00 00 0c 00 fa。

输出是“标题长度= 2(什么是0002而不是0200),高度dec=(fa00的dec.值,而不是00fa)

我还想要值本身的转换,而不仅仅是更正的输出打印。

我在这里搜索了很多小时并尝试了许多代码,但没有一个有效,并且大多数代码都有几行。
之后,我通过读取 2 个字节(以多种方式)来尝试它,例如“BYTE (hlen[1]) 和 [2], hlenlow.

我以前有一个带有字节(而不是结构而是缓冲区)的工作代码,比如

printf(" Pixel dec %u\n", (uint16_t)(buffer[6] << 8) | buffer[7]);  

但现在我想将字节转换为具有正确字节顺序的单词。在使用它们时,我迟早必须转换它们。

标头长度最多为 1024 字节,我不想手动转换每一个。

另外如何打印带有“00”和02的前导0的字节?我总是有问题。字符串可能是稍后的另一个问题(如何检查里面的长度)。后来根据标题长度有可变的调色板。我检查了许多其他代码,但没有一个相似或极难理解(如许多 inc 文件)。最好和最简单的方法是什么?最好转换所有字节(3个字符串除外)

typedef unsigned short WORD;
struct header{
WORD (hlen); 
WORD (datatype); 
WORD (height);
char date [8]; 
..
}

// file io with fp

struct header input;
fread(&input, sizeof(struct header), 1, fp);
printf("Header length =%X%X\n", input.hlen);
..
printf("height dec=%u%u\n", input.height);

标签: arrayscendianness

解决方案


推荐阅读