博主在日常工作中开展项目开发,经常遇到要将数据格式做转换处理,比如一段字符串转换为16进制的byte数组、或者一段16进制的byte数组转换成字符串输出等等。

现将这部分常见功能的实现分享给大家,希望对大家的学习和工作有所帮助。

//将一个双字节(16位的数值)拆分为一个数组按字节存储 如 0x1234 ==> 0x12 0x34
void uint16_2_str(uint16_t Num, uint8_t *buff2)
{buff2[1] = (uint8_t)Num;Num >>= 8;buff2[0] = (uint8_t)Num;
}//将可读的16进制串合并成其一半长度的二进制串, 如 "12AB"-->0x12AB
void asc_2_bcd(char *psIAsc, int32_t iAscLen, char *psOBcd)
{char   Chtmp,ChBcd;int32_t    iCnt;for(iCnt = 0; iCnt < iAscLen; iCnt += 2){Chtmp = psIAsc[iCnt];if( Chtmp >= 'A' ){Chtmp = (char)toupper((int)Chtmp) - 'A' + 0x0A;}else{Chtmp &= 0x0F;}ChBcd = (Chtmp << 4); // 获取BCD的高位Chtmp = psIAsc[iCnt+1];if( Chtmp >= 'A' )  //zyl{Chtmp = (char)toupper((int)Chtmp) - 'A' + 0x0A;}else{Chtmp &= 0x0F;}ChBcd |= Chtmp; // 获取BCD低位psOBcd[iCnt/2] = ChBcd;}
}//将二进制源串分解成双倍长度可读的16进制串, 如 0x12AB-->"12AB"
void bcd_2_asc(uint8_t *psIHex, int32_t iHexLen, char *psOAsc)
{static const char szMapTable[17] = {"0123456789ABCDEF"};int32_t   iCnt,index;unsigned char  ChTemp;for(iCnt = 0; iCnt < iHexLen; iCnt++){ChTemp = (unsigned char)psIHex[iCnt];index = (ChTemp / 16) & 0x0F;psOAsc[2*iCnt]   = szMapTable[index];ChTemp = (unsigned char) psIHex[iCnt];index = ChTemp & 0x0F;psOAsc[2*iCnt + 1] = szMapTable[index];}
}// 同bcd_2_asc()函数,并在目标串后添一 '\0'
void bcd_2_asc0(uint8_t *psIHex, int32_t iHexLen, char *pszOAsc)
{bcd_2_asc((uint8_t *)psIHex, iHexLen, pszOAsc);pszOAsc[2*iHexLen] = 0;
}// 对一段字符串pszString填充前导字符ChAddChar,以便达到uiTargetLen长度
static void add_head_chars( char *pszString, int32_t iTargetLen, char ChAddChar )
{int32_t iLen;iLen = strlen((char *)pszString);if( iLen>=iTargetLen ){return;}memmove(pszString+iTargetLen-iLen, pszString, iLen+1);memset(pszString, ChAddChar, iTargetLen-iLen);
}// 删除一个字符串pszString中的前导字符ChRemoveChar
static void trim_head_chars(char *pszString, char ChRemoveChar)
{char    *p;if( !pszString || !*pszString ){return;}for(p=pszString; *p && *p==ChRemoveChar; p++);if( p!=pszString ){while( (*pszString++ = *p++) );}
}//以一个字符串str,以delim为分割符号,分割成多个字符串,返回分割后的首地址
char *my_strtok(char *src, const char *delim, char *dst)
{if (src && *src){char *p = strstr(src, delim); if (p){if (dst){memcpy(dst, src, (p-src));}return ++p;}else{if (dst){strcpy(dst, src);}return NULL;}}else{return NULL;}
}

大家如对实现代码有疑问,欢迎在评论席发言。 @_@ ...

【C语言进阶】常见数据格式转换处理的代码实现相关推荐

  1. 机器学习常见数据格式转换(xml_to_csv,csv_to_tfrecord)

  2. C语言-英文字母倒序转换

    C语言-英文字母倒序转换 题目来源 代码 题目来源 厦门大学在线评测系统 2018级C语言程序设计实验课1368号试题 代码 //将字符串里的英文字母换成26个英文字母中序号相反的,第一个换成倒数第一 ...

  3. Go语言进阶,结构体与json字符串格式的互相转换

    对于结构体大家都很熟悉,是一种自定义类型,可以将不同类型的同属于这个类的属性(成员变量)集合在一起,换句话说这些成员变量属于键值对,那么这种也就是常见的json格式,我们来看下如何将结构体转成json ...

  4. R语言数据格式转换函数、数据类型判断函数(numeric、character、vector、matrix、data.frame、factor、logical)、R语言数据格式类型转换

    R语言数据格式转换函数.数据类型判断函数(numeric数值.character字符串.vector向量.matrix矩阵.data.frame数据表.factor因子.logical逻辑).R语言数 ...

  5. R语言-数据格式转换

    1.数据格式的判定 is.numeric(), is.character(), is.vector(), is.matrix(), is.data.frame() 2.数据格式转换 as.numeri ...

  6. c语言编译常见错误提示,c语言编译常见错误

    c语言编译常见错误 (2012-04-17 21:33:53) 标签: 杂谈 分类: 计算机 1."c" not an argument in function sum 该标识符不 ...

  7. C语言 | 进阶之路第一关

    目录 前言 - 文章概述 深入剖析数据在内存中的存储 数据的类型 整型在内存中的存储 浮点型在内存中的存储 指针进阶 字符指针 指针数组 数组指针 数组传参和指针传参 函数指针 函数指针数组 指向函数 ...

  8. c语言调试出错误怎么改,C语言调试常见错误及修改方法(附习题)

    <C语言调试常见错误及修改方法(附习题)>由会员分享,可在线阅读,更多相关<C语言调试常见错误及修改方法(附习题)(12页珍藏版)>请在人人文库网上搜索. 1.1.调试C程序时 ...

  9. 使用python开发json、csv数据格式转换工具

    使用python开发json.csv数据格式转换工具 json和xml是业界常用的数据格式,而游戏行业经常使用csv配表,包括本地化文本和数值.本文介绍csv和json序列化.逆序列化相关的pytho ...

最新文章

  1. 『ACM-算法-数据结构』信息竞赛进阶指南--树状数组 (模板)
  2. win7无法将应用程序锁定到任务栏的几种解决方法
  3. JAVA面试常考系列一
  4. 计算机活动宣传稿,畅想科技,创造梦想 ——东华大学计算机科学与技术学院第十一届图灵科技文化节通讯稿...
  5. python基础(15)之 继承
  6. RocketMQ事务消息从生产到消费原理详解(包括回查过程)
  7. Sql server2005中如何格式化时间日期
  8. Linux 桌面进化史
  9. 基于JAVA+SpringBoot+Mybatis+MYSQL的医院信息管理系统
  10. SQL Server存储过程初学者
  11. 浅谈软件架构师的工作
  12. 一位女孩对男孩的忠告(转贴)
  13. python xlwt追加_python excel写入及追加写入
  14. 梁文道:盗版电影网站死去,我们仍然不见光明
  15. Python AutoCAD 修改
  16. 蓝鲸作业平台:搞定与脚本相关的一切
  17. Lost connection to the debugger on
  18. Linux_CentOS7 的桌面图标怎样变小/变小的方法
  19. 欧洲共同语言参考标准英语c1,美国小学英语3年级语言知识对标欧洲共同语言参考标准CEFR...
  20. 【成电860考研】《软件工程》-anki卡片知识合集-504张卡片-28000字-上岸资料整理

热门文章

  1. chrome源代码目录结构简介(版本4.1.249.1059)
  2. 【大数据面试题】(一)Hadoop 相关面试题总结
  3. Java--枚举类型(枚举类型介绍 定义枚举类型 枚举类型的使用 枚举类型的注意事项 遍历枚举项)
  4. SQL中获取当前时间的函数、在日期上减去指定的天数的函数
  5. 阿里云服务器绑定域名,阿里云esc绑定域名,阿里云域名备案
  6. 如何对市场进行深入了解,了解当前市场上的热销产品、消费者需求以及行业发展趋势?在哪里寻找专业报告、行业数据、市场分析文章等?
  7. airpods耳机敲击没反应_airpods怎么敲击切歌_airpods如何设置敲击切歌
  8. postgresql-COALESCE函数、NULLIF函数、NVL函数使用
  9. iframe X-Frame-Options
  10. 赠书活动 | 万亿级市场:大家都能看到的机会谈不上机会