当前位置: 首页 > backend >正文

4.7 字符串到整形的相互转换

1、通用ascii转 int32(有符号32位)

功能说明

功能说明: 变长的 ASCII 字符转换成有符号32位整数

  1. 遇到小数点自动越过。
  2. 支持去前导’ ',以空格、逗号等结尾的字符串
  3. 支持 10进制(-2147483648-2147483647、+2147483648-2147483647)
  4. 支持 16进制(0x0-0xffffffff、0-ffffffff)

举例如下

	char str5[3][4][12]={{"-2147483648","+2147483647","2147483647","  817"},{"0","0xffffffff","ffffffff","  0X817"},{"-23.560","+23.560","  56.8","  0X0"},};static int32_t intNum5[3][4];for(uint8_t i=0;i<4;i++){//自动判断类型优先级高于指定类型;无法自动判断类型时,使用指定类型,如果没指定默认使用DEC类型asciiToInt32(str5[0][i],&intNum5[0][i],_UNK);//str类型转int;	输入"-2147483648","+2147483647","2147483647","  817", 结果为:-2147483648,2147483647,2147483647,817asciiToInt32(str5[1][i],&intNum5[1][i],_UNK);//str类型转int;	输入"0","0xffffffff","ffffffff","  0X817"			, 结果为:0x00000000,0xFFFFFFFF,0xFFFFFFFF,0x00000817asciiToInt32(str5[2][i],&intNum5[2][i],_UNK);//str类型转int;	输入"-23.560","+23.560","  56.8","  0X0"			, 结果为:-23,23,56,0asciiToInt32(str5[3][i],&intNum5[3][i],_UNK);}	for(uint8_t i=0;i<4;i++){asciiToInt32(str5[i][0],&intNum5[i][0],_HEX);//str类型转int;	输入"-2147483648","+2147483647","2147483647","  817", 结果为:-2147483648,2147483647,1195914823(溢出),0x00000817asciiToInt32(str5[i][1],&intNum5[i][1],_HEX);//str类型转int;	输入"0","0xffffffff","ffffffff","  0X817"			, 结果为:0x00000000,0xFFFFFFFF,0xFFFFFFFF,0x00000817asciiToInt32(str5[i][2],&intNum5[i][2],_HEX);//str类型转int;	输入"-23.560","+23.560","  56.8","  0X0"			, 结果为:-23,23,0x00000056,0asciiToInt32(str5[i][3],&intNum5[i][3],_HEX);}for(uint8_t i=0;i<4;i++){asciiToInt32(str5[i][0],&intNum5[i][0],_DEC);//str类型转int;	输入"-2147483648","+2147483647","2147483647","  817", 结果为:-2147483648,2147483647,2147483647,817asciiToInt32(str5[i][1],&intNum5[i][1],_DEC);//str类型转int;	输入"0","0xffffffff","ffffffff","  0X817"			, 结果为:0x00000000,0xFFFFFFFF,0xFFFFFFFF,0x00000817asciiToInt32(str5[i][2],&intNum5[i][2],_DEC);//str类型转int;	输入"-23.560","+23.560","  56.8","  0X0"			, 结果为:-23,23,56,0asciiToInt32(str5[i][3],&intNum5[i][3],_DEC);}

2、专用ascii转整形

类型定义

原ASCII目标类型函数名备注
ASCII U8uint8_tasciiU8ToUint8(char *pAscii,uint8_t *ret)变长的 ASCII 字符0~255转换成无符号8位整数,如“233”->233(D)
ASCII H8uint8_tasciiH8ToUint8(char *pAscii,uint8_t *ret)固定长度是 2 个字符的 16 进制字符串,转换成无符号8位整数;如:‘AB’->0xAB
ASCII S8int8_tasciiS8ToInt8(char *pAscii,int8_t *ret)变长的 ASCII 字符-128~+127转换成有符号8位整数,如“-123”->-123(D)
ASCII U16uint16_tasciiU16ToUint16(char *pAscii,uint16_t *ret)变长的 ASCII 字符0~65535转换成无符号8位整数,如“1234”->1234(D)
ASCII H16uint16_tasciiH16ToUint16(char *pAscii,uint16_t *ret)固定长度是 4 个字符的 16 进制字符串,转换成无符号8位整数;如:‘ABCD’->0xABCD
ASCII S16int16_tasciiS16ToInt16(char *pAscii,int16_t *ret)变长的 ASCII 字符-32768~+32767转换成有符号8位整数,如“-30000”->-30000(D)
ASCII U32uint32_tasciiU32ToUint32(char *pAscii,uint32_t *ret)变长的 ASCII 字符0~4294967295转换成无符号8位整数,如“1234”->1234(D)
ASCII U32uint32_tasciiH32ToUint32(char *pAscii,uint32_t *ret)固定长度是 8 个字符的 16 进制字符串,转换成无符号32位整数;如:‘ABCDABCD’->0xABCDABCD
ASCII S32int32_tasciiS32ToInt32(char *pAscii,int32_t *ret)变长的 ASCII 字符-2147483648~2147483647转换成有符号32位整数,如“-30000”->-30000(D)

举例

	char str3[3][3][10]={{"0","255","11"},{"00","FF","A0"},{"-128","+127","011"}};static uint8_t intNum3[2][3];static int8_t intNum3_1[3];for(uint8_t i=0;i<3;i++){asciiU8ToUint8(str3[0][i],&intNum3[0][i]);//strUint8_t	类型转 uint8_t;	输入"0","255","11"		结果为:0,255,11asciiH8ToUint8(str3[1][i],&intNum3[1][i]);//strHex8    	类型转 uint8_t;	输入"00","FF","A0"		结果为:0x00,0xFF,0xA0asciiS8ToInt8(str3[2][i],&intNum3_1[i]);  //strInt8		类型转 int8_t;	输入"-128","+127","011"	结果为:-128,127,11}char str4[3][3][10]={{"0","65535","11"},{"00000","FFFF","0A0A"},{"-32768","+32767","011"}};static uint16_t intNum4[2][3];static int16_t intNum4_1[3];for(uint8_t i=0;i<3;i++){asciiU16ToUint16(str4[0][i],&intNum4[0][i]);//strUint16_t	类型转uint16_t;	输入"0","65535","11"		结果为:0,65535,11asciiH16ToUint16(str4[1][i],&intNum4[1][i]);//strHex16    	类型转uint16_t;	输入"00000","FFFF","0A0A"	结果为:0x0000,0xFFFF,0x0A0AasciiS16ToInt16(str4[2][i],&intNum4_1[i]);	//strInt16		类型转int16_t;	输入"-32768","+32767","011"	结果为:-32768,+32767,11}char str5[3][3][12]={{"0","4294967295","11"<
http://www.xdnf.cn/news/1515.html

相关文章:

  • 机器学习分类算法详解:原理、应用场景与测试用例
  • 深入理解 Python 协程:单线程下的高效并发方案
  • JWT的token泄露要如何应对
  • 关于编译原理——语义翻译器的设计
  • 异构迁移学习(无创脑机接口中的跨脑电帽迁移学习)
  • 开发体育直播系统后台权限设计实践分享|ThinkPHP 技术栈落地案例
  • -PHP 反序列化POP 链构造魔术方法流程漏洞触发条件属性修改
  • 开源版「v0」OpenUI:根据文本生成UI界面代码
  • Sqlserver 自增长id 置零或者设置固定值
  • 【工具变量】各市ZF数字治理指标数据集(2001-2024年)
  • RabbitMQ 详解(核心概念)
  • 什么是回表?
  • A2A协议实现概览:多语言生态系统的蓬勃发展
  • vue项目中使用tinymce富文本编辑器
  • 楼宇自控系统如何打破传统桎梏,为建筑管理开创全新思路
  • 京东商品详情数据 API 接口讨论学习
  • Python内置函数---bytearray()
  • 八大排序算法
  • git pull的时候报错
  • 主流开源 LLM 应用开发平台详解
  • 记录下递归
  • 0.(新专栏目录)数据分类的艺术:从理论到实践的全面指南
  • 结构型模式:适配器模式
  • java后端开发day35--集合进阶(四)--双列集合:MapHashMapTreeMap
  • leetcode 二分查找应用
  • Linux/AndroidOS中进程间的通信线程间的同步 - IPC方式简介
  • Podman Desktop:现代轻量容器管理利器(Podman与Docker)
  • 基于stm32的智能门锁系统
  • ecovadis评估注意事项?ecovadis评估过程需要多长时间
  • gem5-gpu教程05 内存建模