fread和endianness混淆

问题描述 投票:0回答:1

因此,为了提供上下文,我的系统是小端的,而我正在读取的文件是大端的(MIDI格式,对于那些感兴趣的人)。我应该从文件中读取各种数据,包括无符号整数(8位,16位和32位),字符和布尔值。

到目前为止,我知道读取无符号整数将是fread()的问题,因为我必须将它们从大端转换为小端。我的第一个问题是,尽管也许有些愚蠢,但我还需要转换字符和布尔值吗?

我的第二个问题是关于整个文件格式。由于文件位于不同的字节序系统中,我是否需要从头到尾读取文件(因为MSB和LSB的位置会有所不同)?还是我需要像通常那样从头到尾读入值,然后将其转换为little endian?

感谢您抽出宝贵的时间阅读我的帖子,以及我可能收到的任何答案!

c endianness fread
1个回答
0
投票

字节序仅反转一定长度的单词(通常为2、4或8个字节)内的顺序。如果要读取一个字节的值(例如char或bool),则字节序无效。但是,如果要读取的值大于一个字节,例如整数,则字节顺序很重要。您仍然可以使用fread,因为字节序与文件读取无关,只需确保从大字节序转换为小字节序即可。

© www.soinside.com 2019 - 2024. All rights reserved.