十进制数值字符串转各种位宽的整形数据demo
本demo实现了字符串转各种位宽的函数,代码简单效率高,非常适合单片机嵌入式应用。需要注意的是字符串需要按照严格的输入要求输入才行,比如“-127”,“255”等,除了第一个字符可以是负号‘-’外,其他字符必须是数字,对应位宽的数字字符,必须选择对应的函数。demo如下,可以直接拷贝到C语言编译器,编译允许即可获得结果。
#include <stdio.h>#include <string.h> /* exact-width signed integer types */typedef signed char int8_t;typedef signed short int int16_t;typedef signed int int32_t;typedef signed long long int64_t; /* exact-width unsigned integer types */typedef unsigned char uint8_t;typedef unsigned short int uint16_t;typedef unsigned int uint32_t;typedef unsigned long long uint64_t;int8_t cAto8(const char * pcString,uint8_t ucLength){ int8_t cInt8 = 0; uint8_t ucI = 0; if(pcString[ucI] == '-'){// ucI++; } for(;ucI<ucLength;ucI++){ cInt8 = cInt8*10 + pcString[ucI]-'0'; } if(pcString[0] == '-'){// cInt8 = ~cInt8 + 1; } return cInt8;}uint8_t ucAtou8(const char * pcString,uint8_t ucLength){ uint8_t ucInt8 = 0; uint8_t ucI = 0; for(;ucI<ucLength;ucI++){ ucInt8 = ucInt8*10 + pcString[ucI]-'0'; } return ucInt8;}int16_t sAto16(const char * pcString,uint8_t ucLength){ int16_t sInt16 = 0; uint8_t ucI = 0; if(pcString[ucI] == '-'){// ucI++; } for(;ucI<ucLength;ucI++){ sInt16 = sInt16*10 + pcString[ucI]-'0'; } if(pcString[0] == '-'){// sInt16 = ~sInt16 + 1; } return sInt16;}uint16_t usAtou16(const char * pcString,uint8_t ucLength){ uint16_t usInt16 = 0; uint8_t ucI = 0; for(;ucI<ucLength;ucI++){ usInt16 = usInt16*10 + pcString[ucI]-'0'; } return usInt16;}int32_t iAto32(const char * pcString,uint8_t ucLength){ int32_t iInt32 = 0; uint8_t ucI = 0; if(pcString[ucI] == '-'){// ucI++; } for(;ucI<ucLength;ucI++){ iInt32 = iInt32*10 + pcString[ucI]-'0'; } if(pcString[0] == '-'){// iInt32 = ~iInt32 + 1; } return iInt32;}uint32_t uiAtou32(const char * pcString,uint8_t ucLength){ uint32_t uiInt32 = 0; uint8_t ucI = 0; for(;ucI<ucLength;ucI++){ uiInt32 = uiInt32*10 + pcString[ucI]-'0'; } return uiInt32;}int64_t lAto64(const char * pcString,uint8_t ucLength){ int64_t lInt64 = 0; uint8_t ucI = 0; if(pcString[ucI] == '-'){// ucI++; } for(;ucI<ucLength;ucI++){ lInt64 = lInt64*10 + pcString[ucI]-'0'; } if(pcString[0] == '-'){// lInt64 = ~lInt64 + 1; } return lInt64;}uint64_t ulAtou64(const char * pcString,uint8_t ucLength){ uint64_t ulInt64 = 0; uint8_t ucI = 0; for(;ucI<ucLength;ucI++){ ulInt64 = ulInt64*10 + pcString[ucI]-'0'; } return ulInt64;}main(int argc, char *argv[]){ int8_t a1; uint8_t a2; int16_t b1; uint16_t b2; int32_t c1; uint32_t c2; int64_t d1; uint64_t d2; a1 = cAto8("-128",strlen("-128")); printf("a1=%d\r\n",a1); a2 = ucAtou8("255",strlen("255")); printf("a2=%d\r\n",a2); b1 = sAto16("-32768",strlen("-32768")); printf("b1=%d\r\n",b1); b2 = usAtou16("65535",strlen("65535")); printf("b2=%d\r\n",b2); c1 = iAto32("-2147483648",strlen("-2147483648")); printf("c1=%ld\r\n",c1); c2 = uiAtou32("4294967295",strlen("4294967295")); printf("c2=%u\r\n",c2); d1 = lAto64("-9223372036854775808",strlen("-9223372036854775808")); printf("d1=%ld\r\n",d1); d2 = ulAtou64("18446744073709551615",strlen("18446744073709551615")); printf("d2=%lu\r\n",d2); return 0;}/*-------------------(C) COPYRIGHT 2020 头条@单片机嵌入式爱好者 ----------------*/运行结果如下:a1=-128a2=255b1=-32768b2=65535c1=2147483648c2=4294967295d1=-9223372036854775808d2=18446744073709551615复制代码
来源:单片机嵌入式爱好者