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