十六进制在C ASCII [英] Hex to ASCII in c
问题描述
下面是我的逻辑,以HEX转换在C ASCII转换:
为(i = 0; I< ARRAYSIZE;我++)
{
/ *使用一个位与从字节取前4位,
0XF0是二进制11110000 * /
CHAR1 = TMP [1] - 放大器; 0XF0;
CHAR1 = CHAR1>> 4;
/ *由四个位(即迅速16除以)的结果位右移* /
如果(CHAR1> 9)
{
CHAR1 = CHAR1 - 为0xA;
CHAR1 = CHAR1 +'A';
}
其他
CHAR1 = CHAR1 +'0';
禄[J] = CHAR1;
J ++;
/ *表示使用按位,并从字节采取底部有四个位,
为0x0F是二进制00001111 * /
CHAR1 = TMP [1] - 放大器;为0x0F;
如果(CHAR1> 9)
{
CHAR1 = CHAR1 - 为0xA;
CHAR1 = CHAR1 +'A';
}
其他
CHAR1 = CHAR1 +'0';
禄[J] = CHAR1;
J ++;
禄[J] = 0;
}
Temp和禄是字符串缓冲区。定义并有数据。它不能正常工作。我从一些文件(样本FREAD)读取温度数据。它停止在特定的点读文件。如果我改变第一个
0XF0 P>
块引用>到
为0x0F
块引用>下面是文件是如何被读取:
读取动作= FREAD(TMP,1个字节,PrcFile);
然后读取整个文件。我无法找到缺什么。能否请你帮我在这方面。
谢谢解决方案这是不是一个答案,但观察 - 使用这个,因为它格式化code
静态炭查找[] = {'0','1','2','3','4','5','6','7' ,'8','9','A','B','C','D','E','F'};
INT J = 0;
对于(i = 0; I< ARRAYSIZE ++ I)
{
LOC [J ++] =查找[(TMP [1] - 安培; 0XF0)GT;> 4〕;
LOC [J ++] =查找[TMP [1] - 放大器; 0xF的];
}
LOC [J] = 0;使得code很多更快更简单。
Here is my logic, to convert HEX to ASCII conversion in C:
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 and Loc are string buffers. Defined and has data. It is not working properly. I am reading data in temp from some file (sample fread). It stop reading file at particular point. If I change first
0xf0
to
0x0f
Here is how file is being read:
BytesRead = fread (Tmp,1,Bytes,PrcFile);
Then it reads whole file. I am not able to find what is missing. Can you please help me in this regards. Thanks
解决方案This is not an answer but an observation - using this since it formats code
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;
makes the code a lot quicker and simpler.
这篇关于十六进制在C ASCII的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!