我有4个字节的数组,每个包含4个字节,当我打印它们时,它们水平打印,但我需要它们垂直打印。这可能在C?我知道当我使用printf()
并将数组传递给它时,它会自动打印所有四个字节。我可以将数组细分为四个独立的字节,就像普通数组一样,并在一个单独的行上打印每个字节吗?必须有办法。
为了说明我在做什么,以下是我遇到问题的部分:
byte a0 = state[0];
byte a1 = state[1];
byte a2 = state[2];
byte a3 = state[3];
state[0] = lookup_g2[a0] ^ lookup_g3[a1] ^ a2 ^ a3;
state[1] = lookup_g2[a1] ^ lookup_g3[a2] ^ a3 ^ a0;
state[2] = lookup_g2[a2] ^ lookup_g3[a3] ^ a0 ^ a1;
state[3] = lookup_g2[a3] ^ lookup_g3[a0] ^ a1 ^ a2;
for (int i = 0; i < 4; i++)
{
printf("%02x", state[i]);
}
printf("%s", "\n");
这将在每一行上完整打印每个字节数组,直到main()
结束。我最好垂直打印每个阵列。
此外,我知道我建议使用sprintf()
,但现在我使用printf()
,直到我弄明白如何垂直打印。
示例:
printf("%02x", state[0]);
的产率:
b9 e4 47 c5
我正在寻找的输出是:
b9
e4
47
c5
然后以下迭代将在第一列旁边打印它们的值,如上所示。这可能吗?
答案 0 :(得分:1)
然后如何打印旁边的列中的下一行字节 首先最多四列,然后移动到新的一行?
如果我按照你要做的那样做,你有4个state
数组(或4行和某些列)并且你想要输出第一行,每行包含第一行(每列一个) ),下一行(每列中的一个元素),依此类推。如果要单独输出每个值,则需要嵌套循环,在内循环中一次输出一个值(在列中打印每个元素),然后在内循环完成后输出'\n'
。 / p>
如下所示:
#include <stdio.h>
typedef unsigned char byte;
int main (void) {
byte state[] = { 0xb9, 0xe4, 0x47, 0xc5 },
n = sizeof state / sizeof *state;
for (byte i = 0; i < n; i++) { /* outer loop */
for (byte j = 0; j < n; j++) /* inner loop */
printf (" %02x", state[(j+i)%n]); /* stuff */
putchar ('\n'); /* newline after inner loop completes */
}
return 0;
}
示例使用/输出
$ ./bin/byteperline
b9 e4 47 c5
e4 47 c5 b9
47 c5 b9 e4
c5 b9 e4 47
注意:我只使用第一个数组的值4次来构建四列。您将索引方案调整为数据调用的任何内容(例如,将行作为列或列打印为行)无论如何操作,都必须在行中输出值-wise 方式。您无法打印列,然后备份4行并偏移5个字符并打印下一列。 (我的意思是你可以,但这远远超出了你的问题,并且需要一个单独的curses库以便携方式进行)
仔细看看,如果这是你的意图,请告诉我。