我正在尝试编写一个小函数,它接受整数数据并将其转换为 char 数组中的十六进制值。
我想做的是:
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;
}
答案 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;
}