将十进制转换为十六进制并在C中存储到数组

时间:2018-01-24 12:42:14

标签: c hex converter

我一直在尝试将十进制从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

我认为杂散值是空终止符,但我不确定。

3 个答案:

答案 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}},0b0c0d0e 在此之后,程序输出为:
0f

原因是 -
this: 0a this: 0b this: 0c this: 0d this: 0e this: 0f后的十六进制值为0f10存储在10变量中,该变量将传递给dump_holder atoi返回整数值atoi,该值存储在10中 您的程序正在使用hex_holder[i]格式说明符打印hex_holder[i]中存储的值char的值。因此,值%x将打印为10

使用不正确的格式说明符是未定义的行为,包括它可能正是程序员想要的,或者静默地生成不正确的结果或其他任何内容。

只需将1到99的十进制转换为十六进制并将它们存储到数组中,即可:

0a