Generating a raw bit stream as an output to pipe in another software
所以,我一直在努力解决以下问题:
我有一个包含数百万随机数的文本文件。它们是纯文本。我想将它传送到另一个应该获得比特流的软件的输入(Dieharder 是软件)。
它适用于 /dev/urandom,例如:
1
|
cat /dev/urandom | ./dieharder <options>
|
我已经创建了一个类似的 C 例程来生成二进制原始输出流。它将 ASCII 码转换为十进制(如 0x0F = 15),并将其流式传输到标准输出:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
#include <stdio.h>
#include <errno.h> #include <stdlib.h> #include <string.h> int ASCIItoDec(char c); int main(int argc, char *argv[]) if (argc != 2) |
Dieharder 软件退出通知 EOF 已到达,但未执行任何分析。
什么可能是错的?
- while (c = fgetc(fpr) != EOF) 是错误的。应该是 while ((c = fgetc(fpr)) != EOF),但您还需要将 c 声明为 int,而不是 char。
- 我对此感到抱歉。 ASCIItoDEC 只是一个将 ASCII 转换为十六进制的函数。我将编辑并添加标题。
- memset(buffer, 0, sizeof(buffer)); 没有意义。 sizeof buffer 为您提供指针的大小(即 sizeof (unsigned int *))。
- 谢谢它应该是 size*sizeof(buffer)
- 您正在使用具有不同”单位”的 buffer :初始分配是 malloc(100) (即 100 字节)。然后它被调整为 (size)*sizeof(int) (即 size 整数)。 memset 将其视为单个指针。最后 fwrite 将其视为 size*sizeof(buffer) (即 size 指针)。这些都不适合。
- @cleveraintwise 如果有的话,它应该是 size * sizeof *buffer 或 size * sizeof (unsigned int)。
- strlen(argv[1] + 1) 是一个二乘错误。以下 strcpy(filename, argv[1]); 调用在分配结束后写入两个字节。
问题在于软件输入文件规则。
二进制文件已正确生成。
谢谢。
来源:https://www.codenong.com/53287509/