【问题标题】:Read binary file using fread()使用 fread() 读取二进制文件
【发布时间】: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}; 并将两者都设置为非零。

标签: c file fread


【解决方案1】:

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

【讨论】:

  • 虽然,在根据其他人写的答案写答案时,非常推荐给出归属。
猜你喜欢
  • 1970-01-01
  • 2015-08-22
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
  • 1970-01-01
  • 2020-07-11
  • 1970-01-01
  • 2016-04-19
相关资源
最近更新 更多