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字符转换内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解C语言基础的类型转换

    目录 类型转换 隐式类型转换 强制类型转换 总结 类型转换 数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题.转换包括隐式类型转换和强制类型转换. 类型转换的原则:占用内存字节数少(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精度不降低. 隐式类型转换 隐式转换也称为自动转换,遵循一定的规则,由编译器自动完成. C的整型算数运算总是至少以缺省整型类型的精度来进行,为了获得这个精度,表达式中的字符和短整形操作数在使用之前都被转换成普通整型,这种转换为整型提

  • 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 =

  • VBS 16进制验证特定字符

    复制代码 代码如下: '验证字符:fastslz file=Wscript.ScriptFullName Dim slz set slz = CreateObject("Adodb.Stream") slz.Type = 1 slz.Mode = 3 slz.Open slz.Position = 0 slz.Loadfromfile file Bin=slz.read(18) if AscB(MidB(Bin,12,1))=&H66 and AscB(MidB(Bin,13,

  • Python实现将16进制字符串转化为ascii字符的方法分析

    本文实例讲述了Python实现将16进制字符串转化为ascii字符的方法.分享给大家供大家参考,具体如下: 字符串456e633064316e675f31735f66336e,通过Python,按照两个字符,例如45,6e,63形式变成ascii码格式,输出acsii码格式的字符串. 代码如下: a = "456e633064316e675f31735f66336e" ''.join([chr(int(b, 16)) for b in [a[i:i+2] for i in range(

  • JavaScript中的16进制字符介绍

    前段时间看<JavaScript高级程序设计>终于找到了一点点介绍: \xnn 以十六进制代码nn表示的一个字符(n:0-F) \unnn以十六进制代码表示的一个Unicode字符(n:0-F) 今天由于一个自己的一个需求需要知道一些汉字的十六进制表示,因此自己写了两个方法,可以将文字转换为16进制的表示形式,也可以将16进制代码转换回汉字.方法如下: 复制代码 代码如下: //将文字转换为16进制 function textToSix(str) { return escape(str).re

  • JavaScript中的16进制字符(改进)

    原始的代码: 复制代码 代码如下: //将文字转换为16进制 function textToSix(str) { return escape(str).replace(/%/g, function () { return "\\"; }).toLowerCase(); } 改进后的: 复制代码 代码如下: //将文字转换为16进制 function textToHex(str) { //escape对0-255以外的unicode值进行编码时输出%u****格式,例如:%u6267%u

  • java发送heartbeat心跳包(byte转16进制)

    复制代码 代码如下: package com.jxy.web; import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.UnsupportedEncodingException;import java.net.Socket;import java.net.UnknownHostException; import com.jxy.tools.MyByte; pu

  • 对python以16进制打印字节数组的方法详解

    一.问题描述 如果直接用print打印bytes的话,有时候会直接显示ascii对应的字符,看起来很蛋疼. 二.运行效果 上面一行是直接用print打印的结果,很明显,第一个字节0x7b就被转换成'{'了. 三.代码 那么,如何输入上图中最后一行的格式呢,很简单: def print_hex(bytes): l = [hex(int(i)) for i in bytes] print(" ".join(l)) 以上这篇对python以16进制打印字节数组的方法详解就是小编分享给大家的全

  • javascript将16进制的字符串转换为10进制整数hex

    16进制的字符串 转换为整数 function hex2int(hex) {     var len = hex.length, a = new Array(len), code;     for (var i = 0; i < len; i++) {         code = hex.charCodeAt(i);         if (48<=code && code < 58) {             code -= 48;         } else {

  • js将URL网址转为16进制加密与解密函数

    十六进制(Hexadecimal)是计算机中数据的一种表示方法.同日常生活中的表示法不一样,它由0-9,A-F组成,字母不区分大小写.与10进制的对应关系是:0-9对应0-9:A-F对应10-15:N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F.不同电脑系统.编程语言对于16进制数值有不同的表示方式:如增加0x前缀. 这里推荐一个在线转换的小工具方便大家使用:http://tools.jb51.net/transcoding/decode_encode_tool php函数: bi

  • 汇编语言进制转换之16进制转10进制

    使用8086汇编,输入一个16进制的数,程序把该16进制数转换为相应的10进制数输出 程序运行截图: 要实现这样一个程序,思路可以是这样的: 1.由于我们读入的键盘输入是ASCII码表示的,且输入一个字符便得到一个ASCII码,如输入ab,程序中可以得到61h和62h.现在的问题是怎么把这些输入的字符表示成一个完整的数.对于这个问题,我们可以把每次输入的字符的ASCII码先转换为对应的数,0-9之间的数,根据ASCII码表发现可以用 ASCII码减30h 得到0-9对应的十六进制数值,对于a-b

随机推荐