0

所以我对此感到非常沮丧,并且觉得弄清楚我做错了什么的唯一方法就是问你们这些好人。我正在尝试将一串字符(包含数值)转换为十六进制。这是我的代码(请注意,我还没有将 10-15 的开关设置为字母;我只是想确保在运行此代码时返回整数值……不走运):

void toHex(char *inString){
    char *charVal = inString;
    char decVal[100];

    for(int i = 0; decVal[i] != '\0'; i++){
        decVal[i] = *charVal;
        charVal++;
    }

    char storeMod[100];
    int i = 0;
    int testVal = atoi(decVal);

    for(i; testVal >= 16; i++){
        int a = testVal;
        testVal = testVal/16;
        storeMod[i] = a;
    }

   int a = 0;
   char hexval[100];
   hexVal[0] = '0';
   hexVal[1] = 'x';
   for(int j = i+2; j>=2; j--){
       hexVal[j] = storeMod[a];
       a++;
   }

   printf("%s hex valu\n", hexVal);
   return;
}

例如,输入 300 返回 ,@

我也试过:

char hexVal[100];
sprintf(hexVal,"%x",*inString);
strcpy(instring,hexVal);

它为 300 返回一个十六进制值 3fa844e0 ,这显然也是错误的。任何帮助表示赞赏,我也需要对八进制执行此操作,因此我必须弄清楚这个概念并看看我做错了什么。

4

2 回答 2

4

代替:

sprintf(hexVal,"%x",*inString);

采用:

sprintf(hexVal, "%x", atoi(inString));
于 2012-04-10T02:58:38.430 回答
0

正如已经指出的那样,您可以将整个功能替换为:

printf("%lx\n", strtol(inString, NULL, 10));

但是,如果这是为了学校或个人满足,您似乎知道两个主要步骤。

  • 将字符串转换为整数
  • 将整数编码回右基字符串。

第一步,从左到右逐步遍历数字(这在字符串中很容易)将运行结果乘以 10,然后添加当前数字。

对于第二步,只需一次遍历数字四位(一个十六进制数字),插入那个 plus '0'。如果您从 LSB 开始,请记住反转字符串。

于 2012-04-10T03:35:45.993 回答