在 struct 数组上交换字节顺序字节序,或将 2 个字节组合成一个字

问题描述

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

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

输出是“标题长度= 2(什么是0002而不是0200),高度dec=(fa00的十进制值,而不是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);

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)