快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

如何实现linux下ASCII转HEX

今天就跟大家聊聊有关如何实现linux下ASCII转HEX,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

网站建设哪家好,找成都创新互联!专注于网页设计、网站建设、微信开发、成都微信小程序、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了青浦免费建站欢迎大家使用!

在项目开发过程有时需要对一串数字的16进制文本转换成16进制数组,这是实现方法:

#include 
#include 
#include 
#include  /*isspace,toupper的头文件*/
#include  /*uint8_t的头文件*/
/*去除数组中的空格*/
char *trim(char *str)
{
    if(str == NULL || *str == '\0')
        return NULL;
    int len = strlen(str);
    char *p = str;
    while(*p != '\0'){
        while(isspace(*p)){
            memmove(p,p+1,strlen(p+1)+1);
        }
        p++;
    }
    return str;
}

/*ascii 转16进制数组,失败返回-1,成功返回0*/
int ascii2hex(const char *string,int length,uint8_t hex[],int *hexlen)
{
    char src_arr[length+2];/*奇数个字符首位补‘0’,字符串结束符'\0',所以是+2*/
    int src_len=0,i;
    char ah,al;
    uint8_t ih,il;
    if(string == NULL || hex == NULL || length <1 || hexlen == NULL){
        return -1;
    }
    memset(src_arr,0x00,sizeof(src_arr));
    memcpy(src_arr,string,length);
    if(trim(src_arr) == NULL)
        return -1;
    src_len = strlen(src_arr);
    if(src_len%2){
        *hexlen = src_len/2 + 1;
        memmove(&src_arr[1],&src_arr[0],src_len);
        src_arr[0] = '0';
    }else{
        *hexlen = src_len/2;
    }
    for(i = 0;i < *hexlen;i++){
        ah = src_arr[2*i];
        al = src_arr[2*i+1];
        ih = (ah > '9') ? (toupper(ah) - 'A' + 10):(ah - '0');
        il = (al > '9') ? (toupper(al) - 'A' + 10):(al - '0');
        hex[i] = ih * 16 + il;
    }
    return 0;
}

/*16进制转ascii ,失败返回-1,成功返回0*/
int hex2ascii(uint8_t *src, char dest[], int len)
{
    uint8_t dh,dl;  //字符串的高位和低位
    int i;
    if(src == NULL || dest == NULL || len < 1){
        return -1;
    }   
    for(i = 0; i < len; i++){
        dh = src[i] / 16;
        dh = (dh > 9) ? (dh-10+'A'):(dh + '0');
        dl = src[i] % 16;
        dl = (dl > 9) ? (dl-10+'A'):(dl + '0');
        dest[2*i] = dh; 
        dest[2*i+1] = dl;
    }
    dest[2*i] = '\0';
    return 0;
}

看完上述内容,你们对如何实现linux下ASCII转HEX有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。


分享名称:如何实现linux下ASCII转HEX
URL标题:http://6mz.cn/article/ijiogs.html

其他资讯