十六进制在C ASCII [英] Hex to ASCII in c

查看:279
本文介绍了十六进制在C ASCII的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面是我的逻辑,以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


  

为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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆