我一直在尝试将十进制从1转换为99到十六进制并将它们存储到数组中。
我所拥有的是这样的:
int main(){
int i =1;
char dump_holder[3];
char hex_holder[100];
for (i=1;i<100;i++){
sprintf(dump_holder, "%02x",i);
hex_holder[i] = atoi(dump_holder);
printf("this: %02x\n", hex_holder[i]);
}
return 0;}
我得到一定数量的正确值。此代码返回:
this: 01
this: 02
this: 03
this: 04
this: 05
this: 06
this: 07
this: 08
this: 09
this: 00
this: 00
this: 00
this: 00
this: 00
this: 00
this: 0a
this: 0b
this: 0c
this: 0d
this: 0e
this: 0f
this: 10
this: 11
this: 12
this: 13
this: 01
this: 01
this: 01
this: 01
this: 01
this: 01
this: 14
this: 15
this: 16
this: 17
this: 18
this: 19
this: 1a
this: 1b
this: 1c
this: 1d
我认为杂散值是空终止符,但我不确定。
答案 0 :(得分:1)
但我会尽我所能:
int main(){
int i =1;
char dump_holder[3];
char hex_holder[100];
for (i=1;i<100;i++){
/* convert numerical value to string */
sprintf(dump_holder, "%02x",i);
/* convert string value back to numerical value */
//hex_holder[i] = atoi(dump_holder); //won't work
hex_holder[i] = strtol(dump_holder, NULL, 16); // this will
/* print the numerical value in hex representation */
printf("this: %02x\n", hex_holder[i]);
}
return 0;}
即使如此,我添加了一个小代码,它将实际将代码转换为值的字符串表示。也许那就是你真正打算做的事情
int main()
{
int i = 1;
char dump_holder[3];
/* the array should be an array of strings (restricted here to 2chars) */
char hex_holder[100][2];
for (i=1;i<100;i++){
/* convert numerical value to string representation */
sprintf(hex_holder[i], "%02x",i);
/* print the string produced */
printf("this: %s\n", hex_holder[i]);
}
return 0;
}
答案 1 :(得分:0)
atoi
假定为十进制表示,请尝试使用strtol(dump_holder, NULL, 16);
。
答案 2 :(得分:0)
要了解代码中的问题,首先需要了解 -
atoi
如何运作?
阅读atoi
并查看演示其行为的示例
here
在您的计划输出中,09
之后您获得六次00
,因为atoi
正在返回0
的十六进制值0a
,{{ 1}},0b
,0c
,0d
和0e
在此之后,程序输出为:
0f
原因是 -
this: 0a
this: 0b
this: 0c
this: 0d
this: 0e
this: 0f
后的十六进制值为0f
。 10
存储在10
变量中,该变量将传递给dump_holder
atoi
返回整数值atoi
,该值存储在10
中
您的程序正在使用hex_holder[i]
格式说明符打印hex_holder[i]
中存储的值char
的值。因此,值%x
将打印为10
。
使用不正确的格式说明符是未定义的行为,包括它可能正是程序员想要的,或者静默地生成不正确的结果或其他任何内容。
只需将1到99的十进制转换为十六进制并将它们存储到数组中,即可:
0a