将数组内容打印为字符串

时间:2021-02-19 01:41:24

标签: arrays c

我正在尝试编写一个小函数,它接受整数数据并将其转换为 char 数组中的十六进制值。

我想做的是:

  1. 取整型数组数据
  2. 在另一个数组中将其转换为十六进制
  3. 将十六进制数组的内容转换为字符串
  4. 打印字符串的内容
int main()
{
    int data[4096];
    char hexString[255];
    char* blah;

    data[0] = 1;
    data[1] = 2;
    data[2] = 3;
    data[3] = 4;
    data[4] = 5;
    data[5] = 6;
    data[6] = 7;
    data[7] = 8;
    data[8] = 9;
    data[9] = 89778116;

    for(int i = 0; i < 255; i++)
    {
        sprintf(&hexString[i], "%02x", data[i]);
        printf("%i %i %s\n", i, data[i], &hexString[i]);
        if(data[i] == NULL) {break;}
    }   

    // print contents of hexString as a single string here

    return 1;
}

2 个答案:

答案 0 :(得分:1)

char 不能表示与 int 相同数量的值。

通常是 sizeof(int) == 4 * sizeof(char)。所以,如果你想将它们保存在一个字符数组中,你需要 2 个维度。

char hexString[4096][10];
// 2 ^ 32 => 9ba461594 in hex, so you need a 10th space for the '\0'

sprintf(&hexString[i], "%02x", data[i]);

您编码的方式只有一个数组并在每次迭代后保持覆盖:

after iter 1: hexString = {'0', '1', '\0', ...}
after iter 2: hexString = {'0', '0', '2', '\0', ...}
after iter 3: hexString = {'0', '0', '0', '3', '\0', ...}

并且您一直移动字符串的开头,从位置 0、1、2 开始打印...

答案 1 :(得分:1)

int main(void)
{
    int data[4096];
    char hexString[255];
    int pos = 0;

    data[0] = 1;
    data[1] = 2;
    data[2] = 3;
    data[3] = 4;
    data[4] = 5;
    data[5] = 6;
    data[6] = 7;
    data[7] = 8;
    data[8] = 9;
    data[9] = 89778116;
    data[10] = 0xf;
    data[11] = 0;

    for(int i = 0; i < 255; i++)
    {
        if(data[i] == 0) {break;}
        pos += sprintf(hexString + pos, "%02x", data[i]);
        printf("%i %i %s\n", i, data[i], hexString);
    }   

    // print contents of hexString as a single string here

    return 1;
}
相关问题