将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)++;
}
}
哪里不对?
答案 0 :(得分:1)
首先,一个十六进制数字将覆盖0(0)到15(F)之间的值,而不是0到16之间的值(正如您在int_to_hex
函数中所假设的那样)。
在最后一次返回该功能时,你真的不需要对char
进行类型转换
事实上,这里的所有类型转换都是不必要的
文字16
的类型转换纯粹是荒谬的......
uint_to_hex
的示例输入看起来如何?您知道,在输入(in
)上,您只能传递单char
个字符吗?
我认为char指针足以满足out
- 我的意思是,你想返回数组,对吧?
因此,**
应该只是*
而不是olen
而且我不明白为什么{{1}}必须是指针(以及函数的参数)。
你应该尝试编写更简洁易读的代码,它会帮助你理解你在做什么。