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[]) { FILE *fpr; FILE *fpw; unsigned int i = 0; size_t size=0; char c; unsigned int *buffer; char *filename; buffer = (unsigned int *) malloc(100); filename = (char *) malloc(128); if (argc != 2) { scanf("%s", filename); fpr = fopen(filename,"rb"); } else { filename = (char *) realloc(filename, strlen(argv[1] + 1)); strcpy(filename, argv[1]); fpr = fopen(filename,"rb"); } if (fpr == NULL) { return -1; } while (c = fgetc(fpr) != EOF) { size++; } rewind(fpr); buffer = (int *) realloc(buffer, (size)*sizeof(int)); memset(buffer, 0, sizeof(buffer)); i=0; c = fgetc(fpr); while (c != EOF) { if ((c != ' ') && (c != '\ ') && (c != '\ ') && (c != '\\t')) { buffer[i] = (unsigned int) ASCIItoDec(c); } else if (c == ' ') { buffer[i] = ' '; } c = fgetc(fpr); i++; } fclose(fpr); i=0; //streaming output fwrite(buffer, size*sizeof(buffer), 1, stdout); return 0; } |
Dieharder 软件退出通知 EOF 已到达,但未执行任何分析。
什么可能是错的?
问题在于软件输入文件规则。
二进制文件已正确生成。
谢谢。