下面是我的逻辑,在C中将HEX转换为ASCII转换:
for (i=0;i<ArraySize;i++)
{
/*uses a bitwise AND to take the top 4 bits from the byte,
0xF0 is 11110000 in binary*/
char1 = Tmp[i] & 0xf0;
char1 = char1 >> 4;
/*bit-shift the result to the right by four bits (i.e. 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是字符串缓冲区。定义并拥有数据。它没有正常工作。我正在从某个文件(示例fread)读取临时数据。它在特定的点停止读取文件。如果我先换衣服
0xf0
至
0x0f
下面是读取文件的方式:
BytesRead = fread (Tmp,1,Bytes,PrcFile);然后它会读取整个文件。我找不到丢失的东西。在这方面你能帮我吗。谢谢
发布于 2012-02-10 11:57:13
这不是一个答案,而是一个观察--使用它,因为它格式化了代码。
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<ArraySize; ++i)
{
loc[j++] = lookup[(Tmp[i] & 0xf0) >> 4];
loc[j++] = lookup[Tmp[i] & 0xf];
}
loc[j] = 0;使代码变得更快、更简单。
发布于 2012-02-10 12:08:20
尽管Ed已经提供了一个较短的解决方案,但我试图找出问题所在,因为您的代码“看起来”是正确的。
让我猜猜: char1是签名的(例如,键入"char")。
然后发生了这样的情况:
文件中的一个字节(即>127 )在'A'-'F'.
>> 4是一个有符号的移位,它使位模式保持在最重要的位
>9 (因为符号位仍然被设置为h 29h 110),然后添加+'0',这将导致您有一个值为0的字节,而不是介于'0'-'9‘之间的字节,或者当您打印H 214f 215时,>9终止了字符串。https://stackoverflow.com/questions/9227246
复制相似问题