16进制与ASCII互相转换
代码示例
/*---------如何将16进制数转换为字符串?---------
-----------如何将字符串转换为数据?------------*/
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>#define SIZE 7char *c1 = "ABCD123400001111"; //待测试字符串 高位在前
uint16_t array[SIZE] = {0xABC,0x123,0xFFF,4095,100,8,6}; //待测试16进制数组int main(void) {int i, len;uint32_t temp[30] = { 0 };char temp1[50] = { 0 };/*函数声明*/void HexToAscii(uint8_t *src, char *dest, int len); //16进制数转换为字符串char lowtocap(char c); //小写字母转大写字母void AsciiToHex(char *src, uint32_t *dest, int len); //字符串转16进制数/*** @brief 字符串长度判断处理* @note 字符串两个一组,不足两个当一组处理*/AsciiToHex(c1, temp, strlen(c1)); //字符串 c1 转16进制数if (strlen(c1) % 4 > 0) //字符串长度为奇数,进1{len = strlen(c1) / 4 + 1;}else //字符串长度为偶数 {len = strlen(c1) / 4;}for (i = 0; i < len; i++){printf(" AsciiToHex int[%d] is %X,%d \n", i + 1, temp[i], temp[i]); //%x十六进制 %d十进制}HexToAscii(array, temp1, SIZE); //16进制数组 s 转换为字符串printf("\n HexToAscii temp1 is %s \n\n", temp1);return 0;
}/*** @brief Hex transform to ascii string* @note 16进制数转换为字符串* @param *src : 字符串指针* @param *dest : 数组指针* @param len : 字符串长度 strlen(c1)不包括结束字符(即 null 字符)* @retval void*/
void HexToAscii(uint16_t *src, char *dest, int len)
{char dh1, dl2, dl3; //字符串的高位和低位int i;if (src == NULL || dest == NULL){printf("src or dest is NULL\n");return;}if (len < 1){printf("length is NULL\n");return;}for (i = 0; i < len; i++){//printf("i = %d , %x\n",i, src[i]);dh1 = '0' + src[i] / 256;dl2 = '0' + src[i] % 256 / 16; //以0为基准 dh='0'+AB/16=48+10=58 dl3 = '0' + src[i] % 16; //dl='0'+AB%16=48+11=59if (dh1 > '9'){dh1 = dh1 - '9' - 1 + 'A'; // 或者 dh1= dh1+ 7; dh1=65(A)}if (dl2 > '9'){dl2 = dl2 - '9' - 1 + 'A'; // 或者 dl2= dl2 + 7; dl2=66(B)}if (dl3 > '9'){dl3 = dl3 - '9' - 1 + 'A'; // 或者dl3 = dl3 + 7; dl3=67(C)}dest[3 * i] = dh1;dest[3 * i + 1] = dl2;dest[3 * i + 2] = dl3;}dest[3 * i] = '\0'; //字符串结尾
}/*** @brief ascii string transform to 16 jinzhi Hex.* @note 字符串转16进制数* @param *src : 字符串指针* @param *dest : 数组指针* @param len : 字符串长度 strlen(c1)不包括结束字符(即 null 字符)* @retval void*/
void AsciiToHex(char *src, uint32_t *dest, int len)
{int dh1 , dh2 , dl1 , dl2; // 16进制的高4位和低4位char ch1 , ch2 , cl1 , cl2; //字符串的高位和低位int i;if (src == NULL || dest == NULL){printf("src or dest is NULL\n");return;}if (len < 1){printf("length is NULL\n");return;}for (i = 0; i < len; i++){ch1 = src[4 * i]; //字符串高位ch2 = src[4 * i + 1]; //字符串高位cl1 = src[4 * i + 2]; //字符串低位cl2 = src[4 * i + 3]; //字符串低位dh1 = lowtocap(ch1) - '0'; //dh1 = 'A'- '0' = 17 (ASCII) 16进制高四位 if (dh1 > 9){/*lowtocap可以用库函数toupper*/dh1 = lowtocap(ch1) - 'A' + 10; //dh1 = 'A'- 'A' + 10 = 10 (ASCII)}dh2 = lowtocap(ch2) - '0';if (dh2 > 9) //dh2 = 'B'- '0' = 18 (ASCII){dh2 = lowtocap(ch2) - 'A' + 10; //dh2 = 'B'- 'A' + 10 = 11 (ASCII)}dl1 = lowtocap(cl1) - '0'; //dl1 = 'C'- '0' = 19 (ASCII)if (dl1 > 9){dl1 = lowtocap(cl1) - 'A' + 10; //dl = 'C'- 'A' + 10 = 12 (ASCII)}dl2 = lowtocap(cl2) - '0'; //dl = 'D'- '0' = 20 (ASCII)if (dl2 > 9){dl2 = lowtocap(cl2) - 'A' + 10; //dl = 'D'- 'A' + 10 = 13 (ASCII)}dest[i] = dh1 * 4096 + dh2 * 256 + dl1 * 16 + dl2; //数组赋值 dest[0] = 10*4096 + 11*256 + 12*16 + 13 = 43981}if (len % 4 > 0) //字符串个数为奇数 len = 11{dest[len / 4] = src[len - 1] - '0'; //落单字符单独成组 数组从0开始计数if (dest[len / 4] > 9) // >9 使用字母表示,以A为基准 <9 直接数字表示{dest[len / 4] = lowtocap(src[len - 1]) - 'A' + 10;}}
}/*** @brief lowercase letters transform to capital letter* @note 小写字母转大写字母* @param c : 入口参数 char字符* @retval char*/
char lowtocap(char c)
{if ((c >= 'a') && (c <= 'z')){c = c - 32; // 或者c = c + ('a' - 'A');}return c;
}
运行结果
参考链接:
16进制与字符串相互转换(C语言)
16进制与ASCII互相转换相关推荐
- 把16进制转换为ascii字符c语言,ASCII转16进制C语言
满意答案 u2gseftj278 推荐于 2016.03.01 采纳率:56% 等级:11 已帮助:14340人 以前引别人的,自己懒得再写了呵呵.原理就是这样的,你可以直接用的 //函 数 名 ...
- C# 中2,10,16进制及其ASCII码之间转化
转载连接: http://blog.csdn.net/pengfeihe0123/article/details/7278221 C# 中2,10,16进制及其ASCII码之间转化 ...
- 用bat脚本写一个输入16进制转ascii码的代码
以下是一个使用 BAT 脚本实现 16 进制转 ASCII 码的代码示例: @echo off set /p hex=请输入16进制字符串: for /l %%i in (0,1,%hex:~0,-2 ...
- 物联网中常用的方法,16进制二进制之间的转换
由于最近公司做的是关于物联网的项目,所以经常用到进制转换的功能,所以自己写了一些并且收集了一些方法,供大家使用 import java.text.SimpleDateFormat; import ja ...
- qt 字符串16进制转ascii 字符串ascii转16进制字符串
16进制转ascii int QHelper::changefromHex_to_ascii(QString str) {int ch = str.toInt(0,16);if ((ch >= ...
- JAVA 16进制转ASCII -- 2018年5月25日 周五
/*** 16进制转ASCII** @param hex* @return*/public static String hex2Str(String hex) {StringBuilder sb = ...
- 16进制和ASCII字符互转
C语言中,字符和其ASCII码是等价的,比如'A'这个字符和单字节整数65是等价的. 比如char c='A';int a=c;的话,a就是65 //函 数 名:CharToHex() //功能描 ...
- asic码转16进制c语言,十六进制数转换成ascii码
本文收集整理关于十六进制数转换成ascii码的相关议题,使用内容导航快速到达. 内容导航: Q1:一个十六进制数转换成ASCII码的单片机程序 HASC:MOVA,R0:从R0中取一个16进制(二进制 ...
- 16进制的两位数转换不了 matlab_跟小黑学漏洞利用开发之16进制字符转换
Hello Every Boby! 又是一篇缓冲区漏洞利用的文章,本文我们将继续使用vulnserver漏洞练习程序中-HTER指令,它与前一篇Unicode类似.LTER缓冲区转换为Unicode, ...
最新文章
- 单纯形法(二)(线性规划的基本定理)
- 我对浮动的认识(一)
- 证书到期什么意思_建筑资质资质证书有效期及注意事项
- 老大,我就想加个索引,怎么就这么难?
- CSS3边框图片-像素虚边的问题
- mysql联表查询多记录显示_数据库:MySQL(多表的表记录的查询)(三)
- 《用Python写网络爬虫》——1.5 本章小结
- 哎~~~又是RichTextBox
- 逆天Kali带你游遍大江南北~安全之前人铺路!
- [模拟|字符串] leetcode 6 Z字形变换
- HDU 1728 优化的BFS
- java for步长_Velocity模板循环支持自定义步长
- 贰贰许远东在浙江省社科联学术年会上关于“中小企业数字化之路”的分享
- idea maven添加子moudle父pom被覆盖
- CDH集群中HDFS单点故障解决方案:HA模式(High Availability)
- 大聪明教你学Java | 调用腾讯云短信接口,实现短信通知
- 滤波、信号、数字与模拟、金字塔 一看就懂 教程
- oul可以用作c语言常量吗,2016春北交《C语言程序设计(专) 》在线作业二
- 【layui】图片查看器
- 微信境外支付php_PHP实现 APP端微信支付功能
热门文章
- Ubuntu和Windows双系统蓝牙键盘配对
- 10kV光伏并网用电能质量在线监测装置
- OpenCV-Python实战(7)——直方图详解
- 《惢客创业日记》2020.07.13(周一)最短的一篇日记。
- 超级表格CEO陈坤极受邀参与Impact China2018圆桌会议
- SaltStack-常用模块<一>
- linux server下载64位,ubuntu 16.04服务器版
- Python练习题答案: 括号是响亮!【难度:2级】--景越Python编程实例训练营,1000道上机题等你来挑战
- 爬虫框架scrapy,爬取豆瓣电影top250
- 超微物联网超级服务器IoT SuperServer SYS-210SE-31A 评测