把ASCII码的字符串转为数字的16进制
/*
函数名称:AsciiStrToHexArray
功能:把ASCII码的字符串转为数字的16进制
参数dst:存储16进制数组数据指针
参数src:存储ASCII码的字符串指针
返回值:16进制的数组数据长度
*/
int16_t AsciiStrToHexArray(uint8_t*dst,uint8_t*src)
{
uint8_t ch;
uint16_t index=0;
if(strlen(src) == NULL)
{
return -1;
}
if(strlen(src)%2 == 0)//ASCII字符串偶数长度
{
for(index = 0;index < strlen(src);index++)
{
if((src[index]>='0')&&(src[index]<='9'))//数字0-9范围
{
ch = src[index]-0x30;
}
else if((src[index]>='A')&&(src[index]<='F'))//大写字母A-F范围
{
ch = src[index]-0x37;
}
else if((src[index]>='a')&&(src[index]<='f'))//小写字母,a-f范围
{
ch = src[index]-0x57;
}else{
return -1;
}
if(index%2 != 0)//下标从0开始,取余数不为0则是偶数长度的数据
{
dst[index/2]=dst[index/2]|ch;
}else{
dst[index/2]=ch<<4;
}
}
return (index / 2);//整除,把除数作为16进制数组长度返回
}else{//ASCII字符串奇数长度
for(index = 0;index < strlen(src);index++)
{
if((src[index]>='0')&&(src[index]<='9'))//数字0-9范围
{
ch = src[index]-0x30;
}
else if((src[index]>='A')&&(src[index]<='F'))//大写字母A-F范围
{
ch = src[index]-0x37;
}else if((src[index]>='a')&&(src[index]<='f'))//小写字母,a-f范围
{
ch = src[index]-0x57;
}
else{
return -1;
}
if((index+1) == strlen(src))//奇数时,最后单独一个字符转为16进制后存储缓存
{
dst[index/2] = ch;
}else{//不是最后一个字符
if(index%2 != 0)//下标从0开始,取余数不为0则是偶数长度的数据
{
dst[index/2]=dst[index/2]|ch;
}else{
dst[index/2]=ch<<4;
}
}
}
return (index / 2+1);//不整除,把除数加1作为16进制数组长度返回
}
}
int main()
{
uint8_t str[]="1234567890abcdef"; //12 34 ab cd 0e
uint8_t data[100];
int16_t len = 0;
memset(data,0,sizeof(data));
len = AsciiStrToHexArray(data,str);
if(len != -1)
{
for(uint8_t i = 0;i < len;i++)
{
printf("%0.2x ",data[i]);
}
}
return 0;
}
程序运行结果如下:
把ASCII码的字符串转为数字的16进制相关推荐
- BIN,BCD,ASCII码分别对应的Hex(16进制)数
BIN,BCD,ASCII码分别对应的Hex(16进制)数 以十进制的 56 为例: BIN 码 对应二进制数为 0011 1000 对应Hex数据为 0x38 BIN码就是二进制数: 压缩BCD 码 ...
- C语言sscanf()正则表达式注意及截取字符串 提取数字 转16进制字节数组 超简单
截取字符串 #include <stdio.h> int main(int argc,char** argv) {const char* in = "a1b2c3ABCdef 1 ...
- C# 数字转16进制和字符串转换16进制
数字转换16进制.前提是你输入的必须是数字,而不是别的东西. private string StringToHexString(string s)//数字转换16进制{long Num = Conve ...
- 字符串Ascll格式转16进制
之前做过一些项目需要用到ASCLL码转换到16进制,在网上搜索后发现,大部分都是10进制数字转16进制数据,这对于8位字符类型unsignal char (这里不用char,因为char是-127 ...
- 1253. 将数字转换为16进制
1253. 将数字转换为16进制 给定一个整数,写一个函数将其转换为16进制.对于负整数,需要使用二进制补码. 样例 样例1 输入:26 输出:"1a" 样例2 输入:-1 输 ...
- 将数字转换为16进制
给定一个整数,写一个函数将其转换为16进制.对于负整数,需要使用二进制补码. 样例 样例1 输入:26 输出:"1a" 样例2 输入:-1 输出:"ffffffff&qu ...
- [工具]-C语言中字符串的形式打印16进制数据
C语言中字符串的形式打印16进制数据. 这样写,输出更直观些 #define PRINT_BUF_MAX (32) #define TAG_STRING_MAX (32) static void pr ...
- python将16进制字符串转换为整数_Python 16进制与字符串的转换
电脑上装了Python2.7和3.3两个版本,平时运行程序包括在Eclipse里面调试都会使用2.7,但是由于某些原因在cmd命令行中输入python得到的解释器则是3.3, 一直没对此做处理,因为这 ...
- Android源码中的FLAG为何使用16进制
1.在阅读源码的时候经常发现有一些标志属性使用一些位操作来判断是否具有该标志,增加标志或者去除标志. 比如View.java中的 /*** This view does not want keystr ...
最新文章
- DNA测序技术的发展史之——第一代测序技术
- Android基础教程之五大布局对象------FrameLayout,LinearLayout,AbsoluteLayout,RelativeLayout,TableLayout...
- 数据库服务器 之 在Linux下使用perl通过unixODBC连接SQLServer2000
- 那些不敢生孩子的女人,都在怕什么?
- MyEclipse开发教程:使用REST Web Services管理JPA实体(四)
- 网页禁用鼠标右键和复制功能兼容方式
- 老生又长谈:HttpApplication,HttpModule,HttpContext及Asp.Net页生命周期
- 双目测距中用到的视差图和景深的关系推导----三种方法详细解
- 怎么在linux终端上sed,Linux中如何使用sed命令
- Head First 设计模式--1策略模式 组合优于继承
- P11:经典卷积神经网络结构案例分析
- 选STM32还是51单片机,对于时间有什么要求
- vs2017添加引用出错:对COM组件的调用返回了错误HRESULT E_FAIL
- Typora 安装包2021年11月最后一次免费版本的安装包下载V13.6.1
- 如何确保运维数据安全
- 机械--NX2007(UG)--间隙分析(干涉检查)
- android画布裁剪圆角,Android 视图圆角化处理方案
- Flink HA配置
- Could not transfer artifact (https://repo.maven.apache.org/maven2): Received fatal alert: protocol_v
- 计算机技术专业 英文,计算机应用技术专业(国外英文资料).doc