4.7 字符串到整形的相互转换
1、通用ascii转 int32(有符号32位)
功能说明
功能说明: 变长的 ASCII 字符转换成有符号32位整数
- 遇到小数点自动越过。
- 支持去前导’ ',以空格、逗号等结尾的字符串
- 支持 10进制(-2147483648-2147483647、+2147483648-2147483647)
- 支持 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 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,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"<