C 使用fread()读取二进制文件

C 使用fread()读取二进制文件,c,file,fread,C,File,Fread,我正在尝试使用fread()函数读取二进制文件。 我希望每次读取2字节(UTF-16文件)。 相关代码: char words[2]; while(fread(&words, sizeof(words), 1, sFile)) //do somthing... 文件中的信息仅存储在数组的第一个位置,第二个位置保留为零。有什么想法吗?谢谢谢谢大家,我发现了错误- 在UTF-16中,每个字符是2个字节,“常规”字符在第2个字节中为零。 再次感谢大家。感谢大家,我发现了错误- 在UTF-16

我正在尝试使用fread()函数读取二进制文件。
我希望每次读取2字节(UTF-16文件)。
相关代码:

char words[2];
while(fread(&words, sizeof(words), 1, sFile))
//do somthing...

文件中的信息仅存储在数组的第一个位置,第二个位置保留为零。有什么想法吗?谢谢

谢谢大家,我发现了错误-
在UTF-16中,每个字符是2个字节,“常规”字符在第2个字节中为零。

再次感谢大家。

感谢大家,我发现了错误-
在UTF-16中,每个字符是2个字节,“常规”字符在第2个字节中为零。

再次感谢。

“第二个保持为零”-->因为文件中的数据是零-每隔一个字节。如何写入文件?如何初始化您编写的数据?
fread
返回什么?
fwrite
(我假设您使用它来编写)返回什么?请尝试创建一个同时显示写入和读取的对话框。请尝试以下操作:
char words[2]={0xaa}
并查看是否观察到从
0xaa
到其他值的变化。如果文件包含以基本拉丁字母(或使用ASCII码集中的字符)编写的UTF-16编码文本,则UTF-16值将为U+0020..U+007E,这些在UTF-16中编码为一个字节,包含
0x20
0x7E
,另一个包含
0x00
。假设您使用的是Intel硬件,您的endian编码很少,因此第一个字节可能是0x41(ISO 8859-1中的
A
),第二个字节可能是0x00。@vasek最好尝试
char words[2]={0xaa,0x55}并将两者都设置为非零。“第二个保持为零”-->因为文件中的数据是零-每隔一个字节。如何写入文件?如何初始化您编写的数据?
fread
返回什么?
fwrite
(我假设您使用它来编写)返回什么?请尝试创建一个同时显示写入和读取的对话框。请尝试以下操作:
char words[2]={0xaa}
并查看是否观察到从
0xaa
到其他值的变化。如果文件包含以基本拉丁字母(或使用ASCII码集中的字符)编写的UTF-16编码文本,则UTF-16值将为U+0020..U+007E,这些在UTF-16中编码为一个字节,包含
0x20
0x7E
,另一个包含
0x00
。假设您使用的是Intel硬件,您的endian编码很少,因此第一个字节可能是0x41(ISO 8859-1中的
A
),第二个字节可能是0x00。@vasek最好尝试
char words[2]={0xaa,0x55}
并将两者都设置为非零。不过,当根据其他人所写的内容编写答案时,非常建议给出归因。尽管如此,当根据其他人所写的内容编写答案时,非常建议给出归因。