c中的hex到ASCII
这是我的逻辑,在C中将HEX转换为ASCII转换:
for (i=0;i> 4; /*bit-shift the result to the right by four bits (ie quickly divides by 16)*/ if (char1 >9) { char1 = char1 - 0xa; char1 = char1 + 'A'; } else char1 = char1 + '0'; Loc[j]=char1; j++; /*means use a bitwise AND to take the bottom four bits from the byte, 0x0F is 00001111 in binary*/ char1 = Tmp[i] & 0x0f; if (char1 >9) { char1 = char1 - 0xa; char1 = char1 + 'A'; } else char1 = char1 + '0'; Loc[j]=char1; j++; Loc[j]=0; }
Temp和Loc是字符串缓冲区。 定义并拥有数据。 它无法正常工作。 我正在从某个文件中读取temp中的数据(样本fread)。 它在特定点停止读取文件。 如果我先改变
0XF0
至
为0x0F
以下是文件的读取方式:
BytesRead = fread (Tmp,1,Bytes,PrcFile);
然后它读取整个文件。 我无法找到遗漏的东西。 在这方面你能帮我吗? 谢谢
这不是一个答案,而是一个观察 – 使用它,因为它格式化代码
static char lookup[] = { '0', '1', '2','3','4','5','6','7','8','9','A','B','C','D','E','F' }; int j = 0; for (i=0; i> 4]; loc[j++] = lookup[Tmp[i] & 0xf]; } loc[j] = 0;
使代码更快更简单。
尽管Ed已经提供了一个更短的解决方案,但我试图弄清楚出了什么问题,因为你的代码“看起来”是正确的。
我猜:char1是签名的(例如键入“char”)。
然后它发生了:
-
文件中大于127的字节在
&0xf0
期间保持其符号, -
和
>> 4
是一个有符号的移位,它使位模式保持位设置在最高有效位 -
然后你比较
>9
,但不是这种情况,因为符号位仍然设置 -
然后你添加
+'0'
,现在可以导致你有一个值为0的字节而不是’0′ – ‘9’或’A’ – ‘F’之间的字节。 -
在打印时终止字符串