在C中垂直打印字节数组

Posted

技术标签:

【中文标题】在C中垂直打印字节数组【英文标题】:Print Byte Array Vertically in C 【发布时间】:2017-11-15 04:06:38 【问题描述】:

我有 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()ends。最好是垂直打印每个数组,每组四个。

另外,我知道我推荐使用 sprintf(),但现在我使用的是 printf(),直到我知道如何垂直打印。

例子:

printf("%02x", state[0]);

产量:

b9 e4 47 c5

我正在寻找的输出是:

b9
e4
47
c5

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

【问题讨论】:

也许我遗漏了什么,但请在格式字符串的末尾添加一个\n 我试过了。它只是将下一个字节数组移动到下一行... 也许我们有一个术语问题。 state[0] 是一个字节。 state[0..3] 是一个数组。您将连续打印 4 个字节作为 2 个十六进制数字,而不是 4 个数组。请使用一些真实值来编辑您的问题,以准确显示您正在寻找的输出。 printf("%s", "\n");putchar ('\n');不一样吗?建议是printf("%02x\n", state[i]); 那么你如何在第一列最多四列旁边的列中打印下一行字节然后移动到新行? 【参考方案1】:

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

如果我按照您的操作进行操作,则您有 4 个 state 数组(或 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;

使用/输出示例

$ ./bin/byteperline
 b9 e4 47 c5
 e4 47 c5 b9
 47 c5 b9 e4
 c5 b9 e4 47

注意:我只使用了第一个数组中的值 4 次来构造四列。您将根据数据要求调整您的索引方案(例如,将行打印为列或将列打印为行)无论您如何操作,都必须在 row 中输出值- 明智的方式。您不能打印一列,然后备份 4 行并偏移 5 个字符并打印下一列。 (我的意思是你可以,但这远远超出了你的问题,需要一个单独的 curses 库才能以便携的方式完成)

检查一下,让我知道这是否是您的意图。

【讨论】:

以上是关于在C中垂直打印字节数组的主要内容,如果未能解决你的问题,请参考以下文章

将随机数存储在字节数组中

如何在C ++中将字节数组中的整数转换为数字

C 字节数组转换成字符串

C 字节数组转换成字符串

打印机打印字符串转字节数组截取半个中文导致的乱码问题

在C语言中定义二维数组long a[3][5],则数组占多少字节的存储空间?