【问题标题】:Reading DWORD from binary file从二进制文件中读取 DWORD
【发布时间】:2010-04-06 07:22:28
【问题描述】:

为什么当我尝试使用fread(&num, "file path", 1, FILE*); 读取DWORD num = 1880762702 时这些代码行不起作用如果我将数字更改为任何其他数字说2880762702 我会得到result = 10574 只有这样它才能工作。

【问题讨论】:

  • 您提供的代码甚至无法编译。请提供完整的sn-p代码...
  • 请您澄清一下您的问题。发布程序的实际代码,包括代码中使用的变量的声明,以及对 fopen() 和 fclose() 的调用。

标签: c input


【解决方案1】:

要读取多字节数量,例如 DWORD(在 Win32 中表示 32 位数字),您需要了解 endianness。最好一次读取第一个字节,并从文件中使用的字节顺序转换。

FILE *in;
DWORD num = 0;

if((fin = fopen("filename.bin", "rb")) != NULL)
{
  unsigned char b0, b1, b2, b3;

  fread(&b3, sizeof b3, 1, in);
  fread(&b2, sizeof b2, 1, in);
  fread(&b1, sizeof b1, 1, in);
  fread(&b0, sizeof b0, 1, in);

  // Assuming file is big-endian.
  // for little endian, swap the order to b0...b3
  num = (((DWORD) b3) << 24) | (((DWORD) b2) << 16) | (((DWORD) b1) << 8) | b0;

  fclose(in);
}

【讨论】:

    【解决方案2】:

    fread() 的第二个参数是要读取的数据的大小。在你的情况下,那是sizeof(DWORD)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-24
      • 2015-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      • 1970-01-01
      相关资源
      最近更新 更多