关于 c:生成原始比特流作为输出到另一个软件中的管道

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 已到达,但未执行任何分析。
什么可能是错的?


问题在于软件输入文件规则。
二进制文件已正确生成。
谢谢。


原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/269318.html

(0)
上一篇 2022年6月21日
下一篇 2022年6月21日

相关推荐

发表回复

登录后才能评论