C++ 在C中垂直打印字节数组

C++ 在C中垂直打印字节数组,c++,c,arrays,printf,C++,C,Arrays,Printf,我有4个字节的数组,每个数组包含4个字节,当我打印它们时,它们水平打印,但我需要它们垂直打印。这在C语言中是可能的吗?我知道当我使用printf()并将数组传递给它时,它会自动打印所有四个字节。我可以像普通数组一样将数组细分为四个单独的字节,并在单独的行上打印每个字节吗?一定有办法的 为了说明我在做什么,以下是我遇到问题的部分: byte a0 = state[0]; byte a1 = state[1]; byte a2 = state[2]; byte a3

我有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");
收益率:

b9 e4 47 c5
我想要的输出是:

b9
e4
47
c5
然后,下面的迭代将在第一列旁边打印它们的值,如上图所示。这可能吗


那么,如何在文本旁边的列中打印下一行字节 首先最多四列,然后移动到新行

如果我按照您尝试执行的操作,您有4个
state
数组(或4行和4列),并且您希望输出第一行,每个行中有第一个元素(每列中有一个),下一行(每列中有一个元素),依此类推。如果要单独输出每个值,则需要嵌套循环,在内部循环中一次输出一个值(在列中打印每个元素),然后在内部循环完成后输出
'\n'

如下所示:

#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;
}
注意:我只使用了第一个数组中的值4次来构造四列。您将调整索引方案以适应数据所需的任何内容(例如,将行打印为列或将列打印为行),无论您如何操作,都必须以逐行方式输出值。您不能打印一列,然后备份4行并偏移5个字符,然后打印下一列。(我的意思是你可以,但这远远超出了你的问题,需要一个单独的诅咒库以便携方式完成)


仔细检查一下,让我知道这是否是您想要的。

也许我遗漏了什么,但请在格式字符串的末尾添加一个
\n
。我已经尝试过了。它只是将下一个字节数组移动到下一行……也许我们有一个术语问题<代码>状态[0]是一个单字节<代码>状态[0..3]是一个数组。一行打印4个字节,每个字节为2个十六进制数字,而不是4个数组。请用一些真实的值编辑您的问题,这些值准确地显示了您要查找的输出。不是
printf(“%s”,“\n”)
putchar('\n')相同?建议是
printf(“%02x\n”,状态[i])那么如何在第一列(最多四列)旁边的列中打印下一行字节,然后移动到新行?
#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