C语言 将数组的内容打印为字符串



我有一个小函数,我试图写的整数数据,并将其转换为十六进制值在字符数组内。

我想做的是:

  1. 接受int数组数据
  2. 在另一个数组中转换为十六进制
  3. 将十六进制数组的内容转换为字符串
  4. 打印字符串
  5. 的内容
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 %sn", i, data[i], &hexString[i]);
if(data[i] == NULL) {break;}
}   
// print contents of hexString as a single string here
return 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 ''
sprintf(&hexString[i], "%02x", data[i]);

你的编码方式是你有一个单一的数组,并且在每次迭代后保持覆盖:

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

你一直在移动字符串的开头,从它开始打印从位置0,1,2…

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 %sn", i, data[i], hexString);
}   
// print contents of hexString as a single string here
return 1;
}

最新更新