16进制与字符串相互转换(C语言)
编译语言: C
编译工具链:MinGW GCC
编译环境:eclipse
字符串转换成16进制函数
先写一个字符转大写的函数lowtocap
(也可以直接调用C库函数toupper,需#include <ctype.h>)
/*lowercase letters transform to capital letter*/
char lowtocap(char c)
{if((c >= 'a') && (c <= 'z')){c = c - 32; // 或者c = c + ('a' - 'A');}return c;
}/*ascii string transform to 16 jinzhi Hex*/
void AsciiToHex(char *src, uint8_t *dest, int len)
{int dh,dl; // 16进制的高4位和低4位char ch,cl; //字符串的高位和低位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++){ch = src[2*i];cl = src[2*i+1];dh = lowtocap(ch) - '0';if(dh > 9){dh = lowtocap(ch) - 'A' + 10; //lowtocap可以用库函数toupper}dl = lowtocap(cl) - '0';if(dl > 9){dl = lowtocap(cl) - 'A' + 10; //lowtocap可以用库函数toupper}dest[i] = dh * 16 + dl;}if(len%2 > 0) //字符串个数为奇数{dest[len/2] = src[len-1] - '0';if(dest[len/2] > 9){dest[len/2] = lowtocap(src[len-1]) - 'A' + 10;}}
}
16进制转换成字符串函数
/*16 jinzhi Hex transform to ascii string*/
void HexToAscii(uint8_t *src, char *dest, int len)
{char dh,dl; //字符串的高位和低位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++){dh = '0' + src[i] / 16;dl = '0' + src[i] % 16;if(dh > '9'){dh = dh - '9' - 1 + 'A'; // 或者 dh= dh+ 7;}if(dl > '9'){dl = dl - '9' - 1 + 'A'; // 或者dl = dl + 7;}dest[2*i] = dh;dest[2*i+1] = dl;}dest[2*i] = '\0';
}
开始测试
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>char *c1 = "ABCEEF12345678900C0B"; //待测试字符串
uint8_t s[7] = {0xAB,0xCC,100,50,10,9,8}; //待测试16进制数组int main(void) {int i,len;uint8_t temp[30] = {0};char temp1[50] = {0};AsciiToHex(c1,temp, strlen(c1));if(strlen(c1)%2 > 0){len = strlen(c1)/2 + 1;}else{len = strlen(c1)/2;}for( i = 0; i < len; i++){printf("int[%d] is %X,%d\n", i+1,temp[i],temp[i]);}HexToAscii(s,temp1,sizeof(s));printf("temp1 is %s", temp1);return EXIT_SUCCESS;
}
测试结果如下:
int[1] is AB,171
int[2] is CE,206
int[3] is EF,239
int[4] is 12,18
int[5] is 34,52
int[6] is 56,86
int[7] is 78,120
int[8] is 90,144
int[9] is C,12
int[10] is B,11
temp1 is ABCC64320A0908
16进制与字符串相互转换(C语言)相关推荐
- c语言 乱码转化为16进制_C语言版的16进制与字符串互转函数
http://www.cnblogs.com/nio-nio/p/3309367.html /* // C prototype : void StrToHex(BYTE *pbDest, BYTE * ...
- python中文转16进制_Python 16进制与中文相互转换的实现方法
Python中编码问题:u'\xe6\x97\xa0\xe5\x90\x8d' 类型的转为utf-8的解决办法 相信小伙伴们遇到过类似这样的问题,python2中各种头疼的转码,类似u'\xe6\x9 ...
- C# 16进制与字符串、字节数组之间的转换
在串口通讯过程中,经常要用到 16进制与字符串.字节数组之间的转换 字符串转16进制字节数组 1 private static byte[] strToToHexByte(strin ...
- Java 字符串,byte[],16进制的字符串互转
Java 字符串,byte[],16进制的字符串互转 /** * 字符串转换成十六进制字符串 */ public static String str2HexStr(String str) { char ...
- ByteArray、16进制、字符串之间的转换
ByteArray.16进制.字符串之间的转换: package fengzi.convert {import flash.utils.ByteArray;public class ByteArray ...
- python 16进制补零_Python输出16进制不带0x补零,整数转16进制,字符串转16进制
python输出16进制不带0x补零,整数转16进制,字符串转16进制 在开发中,我们偶尔会遇到需要将数据通过控制台打印出来,以检查数据传输的准确性.例如调试服务端刚接到的二进制数据(里面包含很多非可 ...
- Python输出16进制不带0x补零,整数转16进制,字符串转16进制
Python输出16进制不带0x补零,整数转16进制,字符串转16进制 在开发中,我们偶尔会遇到需要将数据通过控制台打印出来,以检查数据传输的准确性.例如调试服务端刚接到的二进制数据(里面包含很多 ...
- 16进制转字符串字符串转16进制
//16进制转字符串 void HexToStr(char *pbDest, char *pbSrc, int nLen) { unsigned char ddl,ddh; int i ...
- php把接收到的16进制转成字符串,php将16进制转为字符串的方法
php将16进制转为字符串的方法 发布时间:2020-07-18 09:24:23 来源:亿速云 阅读:81 作者:清晨 这篇文章将为大家详细讲解有关php将16进制转为字符串的方法,小编觉得挺实用的 ...
- QT 实现16进制与字符串互转
QT 实现16进制与字符串互转 文章目录 QT 实现16进制与字符串互转 前言 一.字符串QString转换16进制 二.16进制转换为字符串QString 三.正则表达式限制输入16进制 四.文本自 ...
最新文章
- 零基础是学java还是python-零基础学习编程,Java、Python你会选择哪个?
- Android混淆解析
- FD.io VSAP(VPP Stack Acceleration Project),通过FD.io VSAP构建用户态协议栈
- AndroidStudio项目提交到github
- 计算机系统导论第九章,计算机系统导论 -- 读书笔记 -- 第三章 程序的机器级表示 (持续更新)...
- A guess 解题报告
- java中容器如何维护其内容
- 使用Windbg分析蓝屏原因
- 截止今年六月底的s9t9
- 教你开发一个JS代码加密工具
- libvlc.java_java – LibVlc android无法加载库
- N-gram模型详解
- 仿elem页面学习之表单提交的动作
- 编写程序获取 vector 容器的第一个元素。分别使用下标 操作符、front 函数以及 begin 函数实现该功能,并提 供空的 vector 容器测试你的程序
- C#操作MicroSoft Word的代码
- 干货|Android免Root最全Hook插件(免Root Hook任意App)
- EMERSON艾默生AMS巡检仪维修TREX通讯器维修注意事项
- Java入门之Digital eigenvalue
- gpu虚拟化云服务器,gpu云服务器 虚拟化
- libjpeg库使用举例
热门文章
- 2019年技术盘点容器篇(三):阿里专家谈容器:既叫好又叫座? | 程序员硬核评测
- 软件测试中的测试报告
- ASA使用ASDM管理
- 普元eos根据查询条件导出excel表格
- 广州的11个辖区_13张地形图,快速了解广东省广州市的11个市辖区
- 9 个Java 性能优化的 工具,你知道几个?
- select下拉框option默认选中(php模板渲染)
- HP LaserJet P1108驱动安装
- 如何使用代理服务器下载文件_8uftp怎么下载客户文件,怎么使用8uftp下载客户文件?...
- qqkey获取原理_HIT我守护的一切手游电脑版苹果版有吗 HIT我守护的一切iOS电脑版模拟器...