C语言16进制与ASCII字符相互转换

 更新时间:2022年01月18日 15:24:42   作者:冷冰难暖  
大家好,本篇文章主要讲的是C语言16进制与ASCII字符相互转换,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下

1、把获取到的16进制数据转换成相同字符的ASCII字符,例:get[2] = {0x11,0x22};  →  put[4]={'1','1','2','2'};

数据的转换主要通过sprintf();来完成的,对于该函数网上有许多讲解,想要了解的可以查看一下。

typedef unsigned char uint8_t;
char data[64];
 
uint8_t *hex_to_ascii(uint8_t *str, uint32_t len)
{
    uint8_t *hex_buf = str;
    for (int i = 0; i < len; i++)
    {
        sprintf(&data[i * 2], "%02X", hex_buf[i]);
    }
    return (uint8_t *)data;
}

2、 把获取到的ASCII字符转换成相同字符的16进制,例:get[4]={'a','a','b','b'}; →  put[2] = {0xaa,0xbb};

ASCII转换成16进制主要通过sscanf();来完成的。

typedef unsigned char uint8_t;
char data[64];
uint8_t *ascii_to_hex(char *str, uint32_t len)
{
    char *str_buf = str;
    uint8_t *hex = (uint8_t *)data;
    uint8_t data_buf[len];
    for (int i = 0; i < len; i++)
    {
        sscanf(str_buf, "%02x", (int *)&data_buf[i]);
        str_buf += 2;
    }
    memcpy(hex, data_buf, len);
    return hex;
}

3、把获取到的16进制转换成对应的ASCII字符,例:get[4]={'a','a','b','b'}; → put[4]={0x61,0x61,0x62,0x62};

typedef unsigned char uint8_t;
char data[64];
uint8_t *Char_to_Hex(char *str,uint32_t len)
{
    char *hex_buf = str;
    uint8_t *hex = (uint8_t *)data;
    for (int i = 0; i < len; i++)
    {
        if ((hex_buf[i] >= '0') && (hex_buf[i] <= '9'))        //0x30--0x39
            hex_buf[i] += 0x30;
        else if ((hex_buf[i] >= 'a') && (hex_buf[i] <= 'z'))   //0x61--0x66
            hex_buf[i] += 0x61;
        else if ((hex_buf[i] >= 'A') && (hex_buf[i] <= 'Z'))   //0x41--0x46
            hex_buf[i] += 0x41;
        else
            hex_buf[i] += 0xff;
    }
    memcpy(hex, hex_buf, len);
 
    return hex;
}

4、把获取到的ASCII转换成对应的16进制字符,例:get[4] = {0x61,0x61,0x62,0x62}; → put[4]={'a','a','b','b'};

typedef unsigned char uint8_t;
char data[64];
uint8_t *Hex_to_Char(char *str,uint32_t len)
{
    char *hex_buf = str;
    uint8_t *hex = (uint8_t *)data;
    for (int i = 0; i < len; i++)
    {
		if ((hex_buf[i] >= 0x30) && (hex_buf[i] <= 0x39))      //0--9
			hex_buf[i] -= 0x30;
		else if ((hex_buf[i] >= 0x41) && (hex_buf[i] <= 0x46)) //A--Z
			hex_buf[i] -= 0x37;
		else if ((hex_buf[i] >= 0x61) && (hex_buf[i] <= 0x66)) //a--z
			hex_buf[i] -= 0x57;
		else
			hex_buf[i] = 0xff;
    }
    memcpy(hex, hex_buf, len);
 
    return hex;
}

到此这篇关于C语言16进制与ASCII字符相互转换的文章就介绍到这了,更多相关C语言16进制与ASCII字符转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++菱形继承和虚继承的实现

    C++菱形继承和虚继承的实现

    本文主要介绍了C++菱形继承和虚继承的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • C语言取模取整的深入理解

    C语言取模取整的深入理解

    本文主要介绍了 C语言取模取整的深入理解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • c++中typename和class的区别介绍

    c++中typename和class的区别介绍

    在c++Template中,很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢?
    2013-03-03
  • 深入理解结构体中占位符的用法

    深入理解结构体中占位符的用法

    本篇文章是对结构体中占位符的用法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • OpenCV实现人脸检测功能

    OpenCV实现人脸检测功能

    这篇文章主要为大家详细介绍了OpenCV实现人脸检测功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • C++归并法+快速排序实现链表排序的方法

    C++归并法+快速排序实现链表排序的方法

    这篇文章主要介绍了C++归并法+快速排序实现链表排序的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • C++的cout.tellp()和cout.seekp()语法介绍

    C++的cout.tellp()和cout.seekp()语法介绍

    无论是使用 cout 输出普通数据,用 cout.put() 输出指定字符,还是用 cout.write() 输出指定字符串,数据都会先放到输出流缓冲区,待缓冲区刷新,数据才会输出到指定位置,本文给大家介绍一下C++的cout.tellp()和cout.seekp()语法,需要的朋友可以参考下
    2023-09-09
  • c++ 创建型设计模式工厂方法Factory Method示例详解

    c++ 创建型设计模式工厂方法Factory Method示例详解

    这篇文章主要为大家介绍了c++ 创建型设计模式工厂方法Factory Method示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • C++实现的分布式游戏服务端引擎KBEngine详解

    C++实现的分布式游戏服务端引擎KBEngine详解

    这篇文章主要详细介绍了C++实现的分布式游戏服务端引擎KBEngine的概念以及使用方法,非常的实用,有需要的小伙伴可以参考下
    2015-03-03
  • C语言内存操作函数详解

    C语言内存操作函数详解

    这篇文章主要介绍了C语言全部内存操作函数的实现详细讲解,作者用图文代码实例讲解的很清晰,有感兴趣的同学可以研究下
    2021-10-10

最新评论