在C中垂直打印字节数组

时间:2017-11-15 04:06:39

标签: c++ c arrays printf

我有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

然后以下迭代将在第一列旁边打印它们的值,如上所示。这可能吗?

1 个答案:

答案 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库以便携方式进行)

仔细看看,如果这是你的意图,请告诉我。