【问题标题】:C conver unsigned char to HEXC将无符号字符转换为十六进制
【发布时间】:2015-01-11 17:21:01
【问题描述】:

是将 unsigned char / int 转换为 hex,麻烦的是没有正确翻译 ascci 表: 原始: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)++;
   }
}

哪里不对?..

【问题讨论】:

  • out 很奇怪,你也应该展示一下你是怎么称呼它的。另外,为什么不使用例如snprintf() 要这样做吗?
  • 错误情况是什么?
  • 可能是坏的来电者。
  • 我觉得应该是d &gt;= 16。然后您似乎对演员表的概念有疑问。这里的一切都是多余的。
  • 为所有人发送,已解决: if(d >= '0' && d

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


【解决方案1】:

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

uint_to_hex 的样本输入看起来如何?您知道,在输入 (in) 时,您只能传递单个 character 吗?

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

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

【讨论】:

  • 是的,只传入单个字符
猜你喜欢
  • 1970-01-01
  • 2018-01-31
  • 2017-01-11
  • 2013-03-22
  • 2015-09-12
  • 2012-11-09
  • 1970-01-01
  • 2022-09-22
  • 2015-02-18
相关资源
最近更新 更多