gpt4 book ai didi

使用 C 中的 fscanf() 将 uint8 复制到矩阵中

转载 作者:太空宇宙 更新时间:2023-11-04 02:54:32 24 4
gpt4 key购买 nike

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

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 中的 fscanf() 将 uint8 复制到矩阵中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19050606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com