【发布时间】:2019-04-13 09:51:57
【问题描述】:
我正在尝试使用 fread() 函数读取二进制文件。
我想每次读取 2 个字节(UTF-16 文件)。
相关代码:
char words[2];
while(fread(&words, sizeof(words), 1, sFile))
//do somthing...
文件中的信息只存储在数组的第一个位置,第二个保持为零。任何想法?谢谢
【问题讨论】:
-
"第二个保持为零" --> 因为文件中的数据是零——每隔一个字节。
-
如何写入文件?你如何初始化你写的数据?
fread返回什么?fwrite(我假设你用它来写)返回什么?请尝试创建一个Minimal, Complete, and Verifiable Example,同时显示写作和阅读。 -
试试这个:
char words[2] = {0xaa};看看你是否观察到从0xaa到其他值的变化。 -
如果文件包含以基本拉丁字母(或使用 ASCII 代码集中的字符)编写的 UTF-16 编码文本,则 UTF-16 值将为 U+0020..U+007E , 并以 UTF-16 编码为一个字节包含
0x20..0x7E,另一个包含0x00。假设您使用的是 Intel 硬件,您有 little-endian 编码,因此第一个字节可能是 0x41(ISO 8859-1 中的A),第二个字节可能是 0x00。 -
@vasek 最好尝试
char words[2] = {0xaa, 0x55};并将两者都设置为非零。