C将unsigned char转换为HEX

时间:2014-11-14 10:30:54

标签: c hex type-conversion unsigned unsigned-char

将unsigned char / int转换为hex,麻烦是没有正确的翻译ascii表: 原文:0D,转换:AD 代码:

char int_to_hex(int d) {
   if (d < 0)  return -1;
   if (d > 16) return -1;
   if (d <= 9) return '0' + d;
   d -= 10;
   return (char)('A' + d);
}
void uint_to_hex(unsigned char in, char **out, int *olen) {
   int  i = 0;
   int  remain[2];
   int  result = (int)in;

   while (result) {
      remain[i++] = result % 16;
      result /= (int)16;
   }
   for (i = 1; i >= 0; --i) {
    char c = int_to_hex(remain[i]);
    if( (int)c == -1 ) { continue; }
    *((*out) + (*olen)) = (char)c; (*olen)++;
   }
}

哪里不对?

1 个答案:

答案 0 :(得分:1)

首先,一个十六进制数字将覆盖0(0)到15(F)之间的值,而不是0到16之间的值(正如您在int_to_hex函数中所假设的那样)。
在最后一次返回该功能时,你真的不需要对char进行类型转换 事实上,这里的所有类型转换都是不必要的 文字16的类型转换纯粹是荒谬的......

uint_to_hex的示例输入看起来如何?您知道,在输入(in)上,您只能传递单char个字符吗?

我认为char指针足以满足out - 我的意思是,你想返回数组,对吧? 因此,**应该只是*而不是olen 而且我不明白为什么{{1}}必须是指针(以及函数的参数)。

你应该尝试编写更简洁易读的代码,它会帮助你理解你在做什么。