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,817
		asciiToInt32(str5[1][i],&intNum5[1][i],_UNK);//str类型转int;	输入"0","0xffffffff","ffffffff","  0X817"			, 结果为:0x00000000,0xFFFFFFFF,0xFFFFFFFF,0x00000817
		asciiToInt32(str5[2][i],&intNum5[2][i],_UNK);//str类型转int;	输入"-23.560","+23.560","  56.8","  0X0"			, 结果为:-23,23,56,0
		asciiToInt32(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(溢出),0x00000817
		asciiToInt32(str5[i][1],&intNum5[i][1],_HEX);//str类型转int;	输入"0","0xffffffff","ffffffff","  0X817"			, 结果为:0x00000000,0xFFFFFFFF,0xFFFFFFFF,0x00000817
		asciiToInt32(str5[i][2],&intNum5[i][2],_HEX);//str类型转int;	输入"-23.560","+23.560","  56.8","  0X0"			, 结果为:-23,23,0x00000056,0
		asciiToInt32(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,817
		asciiToInt32(str5[i][1],&intNum5[i][1],_DEC);//str类型转int;	输入"0","0xffffffff","ffffffff","  0X817"			, 结果为:0x00000000,0xFFFFFFFF,0xFFFFFFFF,0x00000817
		asciiToInt32(str5[i][2],&intNum5[i][2],_DEC);//str类型转int;	输入"-23.560","+23.560","  56.8","  0X0"			, 结果为:-23,23,56,0
		asciiToInt32(str5[i][3],&intNum5[i][3],_DEC);
	}

2、专用ascii转整形

类型定义

原ASCII 目标类型 函数名 备注
ASCII U8 uint8_t asciiU8ToUint8(char *pAscii,uint8_t *ret) 变长的 ASCII 字符0~255转换成无符号8位整数,如“233”->233(D)
ASCII H8 uint8_t asciiH8ToUint8(char *pAscii,uint8_t *ret) 固定长度是 2 个字符的 16 进制字符串,转换成无符号8位整数;如:‘AB’->0xAB
ASCII S8 int8_t asciiS8ToInt8(char *pAscii,int8_t *ret) 变长的 ASCII 字符-128~+127转换成有符号8位整数,如“-123”->-123(D)
ASCII U16 uint16_t asciiU16ToUint16(char *pAscii,uint16_t *ret) 变长的 ASCII 字符0~65535转换成无符号8位整数,如“1234”->1234(D)
ASCII H16 uint16_t asciiH16ToUint16(char *pAscii,uint16_t *ret) 固定长度是 4 个字符的 16 进制字符串,转换成无符号8位整数;如:‘ABCD’->0xABCD
ASCII S16 int16_t asciiS16ToInt16(char *pAscii,int16_t *ret) 变长的 ASCII 字符-32768~+32767转换成有符号8位整数,如“-30000”->-30000(D)
ASCII U32 uint32_t asciiU32ToUint32(char *pAscii,uint32_t *ret) 变长的 ASCII 字符0~4294967295转换成无符号8位整数,如“1234”->1234(D)
ASCII U32 uint32_t asciiH32ToUint32(char *pAscii,uint32_t *ret) 固定长度是 8 个字符的 16 进制字符串,转换成无符号32位整数;如:‘ABCDABCD’->0xABCDABCD
ASCII S32 int32_t asciiS32ToInt32(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,11
		asciiH8ToUint8(str3[1][i],&intNum3[1][i]);//strHex8    	类型转 uint8_t;	输入"00","FF","A0"		结果为:0x00,0xFF,0xA0
		asciiS8ToInt8(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,11
		asciiH16ToUint16(str4[1][i],&intNum4[1][i]);//strHex16    	类型转uint16_t;	输入"00000","FFFF","0A0A"	结果为:0x0000,0xFFFF,0x0A0A
		asciiS16ToInt16(str4[2][i],&intNum4_1[i]);	//strInt16		类型转int16_t;	输入"-32768","+32767","011"	结果为:-32768,+32767,11
	}
	
	char str5[3][3][12]={
   
   {
   
   "0","4294967295","11"},{
   
   "000000000"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值