在 C 中写入未格式化的直接访问二进制文件

Writing to an unformatted, direct access binary file in C

我正在尝试使用这个顽固的存储库来测试数字流的随机性 (https://github.com/reubenhwk/diehard)。它给出了它读取的文件类型的这些细节:

Then the command diehard will prompt for the name of the file to be tested.

That file must be a form="unformatted",access="direct" binary file of from 10 to 12 million bytes.

这些是特定于 Fortran 的文件约定,不是吗?问题是,我正在使用 lfsr-generator 生成我的随机二进制流,这是在 C 中。我尝试将二进制流的 fputc 转换为文本文件或 .bin 文件,但是顽固派似乎不太接受

我没有使用 Fortran 的经验。有什么方法可以使用 C 创建这种文件类型吗?我是否只需要硬着头皮让 C 调用创建文件的 fortran 子例程?这是我的 C 代码供参考:

#include <stdio.h>

int main(void)
{
  FILE *fp;
  fp=fopen("numbers", "wb");

  const unsigned int init = 1;
  unsigned int v = init;
  int counter = 0;

  do {
    v = shift_lfsr(v);
    fputc( (((v & 1) == 0) ? '0' : '1'), fp);
    counter += 1;
  } while (counter < 11000000);
}

您创建的二进制文件很好。您的问题是您每个字节只写一个随机位(并将其扩展为文本)。 Diehard 希望每一点都是随机的。所以写之前一次累加8位:

do {
  int b = 0;
  for (int i = 0; i < 8; i += 1) {
    v = shift_lfsr(v);
    b <<= 1;
    b |= (v & 1);
  }
  fputc(b, fp);
  . . .