生成原始比特流作为输出以在另一个软件中进行管道传输
Generating a raw bit stream as an output to pipe in another software
所以,我一直在努力解决以下问题:
我有一个包含数百万个随机数的文本文件。它们是纯文本。我想将它输出到另一个应该获得比特流的软件的输入(Dieharder 是该软件)。
它适用于 /dev/urandom,例如:
cat /dev/urandom | ./dieharder <options>
我已经创建了一个类似的 C 例程来生成二进制原始输出流。它将 ASCII 码转换为十进制(如 0x0F = 15),并将其流式传输到标准输出:
#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 != '\r') && (c != '\n') && (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,但未执行任何分析。
可能有什么问题?
问题出在软件输入文件规则上。
二进制文件已正确生成。
谢谢。
所以,我一直在努力解决以下问题: 我有一个包含数百万个随机数的文本文件。它们是纯文本。我想将它输出到另一个应该获得比特流的软件的输入(Dieharder 是该软件)。 它适用于 /dev/urandom,例如:
cat /dev/urandom | ./dieharder <options>
我已经创建了一个类似的 C 例程来生成二进制原始输出流。它将 ASCII 码转换为十进制(如 0x0F = 15),并将其流式传输到标准输出:
#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 != '\r') && (c != '\n') && (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,但未执行任何分析。 可能有什么问题?
问题出在软件输入文件规则上。 二进制文件已正确生成。 谢谢。