我想在矩阵中复制一个文件,但它不起作用。我认为在把十六进制数变成文件的方法中有一个问题,也许我没有使用正确的说明符。对于算法,我认为它是正确的,但是我不明白为什么第一行变成结果中的第一列。
这就是我得到的结果:

63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
7c 0 ...
77 0 ...
7b 0 ...
f2 0 ...
6b 0 ...
6f 0
c5 0
30 0
1 0
67 0
2b 0
fe 0
d7 0 ...
ab 0 ...
76 0 ...

与文件的第一行相对应的第一列。
谢谢你的帮助
看看我的程序
typedef uint8_t Sbox [16][16];

const int SBOX_ROWS = 16;
const int SBOX_COLS = 16;

Sbox* read_sbox(FILE *fp)
{

    Sbox* result = NULL;
    int i,j;
    if (fp != NULL)
    {
        result = (Sbox*)malloc(sizeof(Sbox));
        for (i = 0 ; i < SBOX_ROWS ; i++)
        {
            for (j = 0 ; j < SBOX_COLS-1 ; j++)
            {
                fscanf(fp,"%x",result[i][j]);
            }
            fscanf(fp,"%x\n",result[i][SBOX_COLS-1]);
        }
    }
    return result;
}

int main()
{
    FILE* fp = NULL;
    Sbox* res = NULL;
    int i,j;
    if ((fp = fopen("sbox.txt", "r")) == NULL)
    {
        fprintf(stderr, "Failed to open file: sbox.txt\n");
        exit(1);
    }
    else
    {
        printf("Dans else\n");
        res = read_sbox(fp);
    }
    if (res == NULL)
    {
        printf("res NULL\n");
    }
    for (i = 0 ; i < SBOX_ROWS ; i++)
        {
            for (j = 0 ; j < SBOX_COLS-1 ; j++)
            {
                printf("%x ",(*res)[i][j]);
            }
           printf("%x\n",(*res)[i][j]);
        }
    return 0;
}

最佳答案

一个问题是,您正在用fscanf()将一个整数读入一个字节(uint8),该字节不够大,无法容纳它。
取而代之的是:

fscanf(fp,"%x",&u);
(*result)[i][j] = (uint8_t)u;

其中u是一个unsigned int

关于c - 在C中使用fscanf()将uint8复制到矩阵中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19050606/

10-10 14:54