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

时间:2017-08-31 16:39:29

标签: c fortran lfsr

我试图使用这个顽固的回购来测试随机数的数字流(https://github.com/reubenhwk/diehard)。它为它所读取的文件类型提供了这些细节:

  

然后命令              死硬死硬的顽固的   将提示输入要测试的文件的名称。

     

该文件必须是格式="未格式化",访问="直接"二进制   文件为10到1200万字节。

这些是特定于fortran的文件约定,不是吗?问题是,我使用lfsr-generator来生成我的随机二进制流,并且在C中。我尝试将二进制流的fputc做为文本文件或{{{I} 1}}文件,但是死硬似乎并没有接受它。

我没有遇到过fortran的经历。有没有办法用C创建这个文件类型?我是否只需咬紧牙关并让C调用创建文件的fortran子程序?这是我的C代码供参考:

.bin

1 个答案:

答案 0 :(得分:3)

您正在创建二进制文件。您的问题是您每个字节只写一个随机位(并将其扩展为文本)。迪哈德希望每一点都是随机的。所以在你写之前一次累加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);
  . . .