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++实现屏幕截图功能,截图自动保存为png格式文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • 基于C语言实现三子棋小游戏

    基于C语言实现三子棋小游戏

    这篇文章主要为大家详细介绍了基于C语言实现三子棋小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • CFileDialog的钩子函数解决对话框的多选之DoModal问题

    CFileDialog的钩子函数解决对话框的多选之DoModal问题

    前几天领导问我一个问题:就是使用CFileDialog类在设置多选时选中的文件所放的文件缓冲区不知设置多大合适,本文将详细介绍,需要的朋友可以参考下
    2012-12-12
  • C++ LeetCode1805字符串不同整数数目

    C++ LeetCode1805字符串不同整数数目

    这篇文章主要为大家介绍了C++ LeetCode1805字符串不同整数数目,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • C++实现数组的排序/插入重新排序/以及逆置操作详解

    C++实现数组的排序/插入重新排序/以及逆置操作详解

    将新的数字与已经排序好的数组中的数字一一比较,直到找到插入点,然后将插入点以后的数字都向后移动一个单位(a[i+1]=a[i]),然后将数据插入即可
    2013-10-10
  • C++编程中的命名空间基本知识讲解

    C++编程中的命名空间基本知识讲解

    这篇文章主要介绍了C++编程中的命名空间基本知识讲解,包括对C++11中内联命名空间新特性的介绍,需要的朋友可以参考下
    2016-01-01
  • c++ 智能指针基础详解

    c++ 智能指针基础详解

    这篇文章主要介绍了c++ 智能指针基础的相关资料,帮助大家更好的理解和学习使用c++,感兴趣的朋友可以了解下
    2021-02-02
  • 利用Matlab制作环形相册效果详解

    利用Matlab制作环形相册效果详解

    这篇文章主要为大家介绍了如何利用Matlab制作出环形相册的效果,文中的示例代码讲解详细,对我们学习Matlab有一定帮助,需要的可以参考一下
    2022-03-03
  • C++实现线性表顺序存储的示例代码

    C++实现线性表顺序存储的示例代码

    这篇文章主要为大家详细介绍了C++实现线性表顺序存储的相关知识,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的可以了解一下
    2023-03-03
  • VScode编译C++ 头文件显示not found的问题

    VScode编译C++ 头文件显示not found的问题

    这篇文章主要介绍了VScode编译C++ 头文件显示not found的问题,本文给大家分享问题解决方法,通过截图的形式给大家介绍的非常详细,需要的朋友可以参考下
    2020-03-03

最新评论