C语言 | 6种常用的转换工具函数盘点
生活随笔
收集整理的這篇文章主要介紹了
C语言 | 6种常用的转换工具函数盘点
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
字符串轉十六進制
代碼實現:
void StrToHex(char *pbDest, char *pbSrc, int nLen){ ?char h1,h2; ?char s1,s2; ?int i; ?for (i=0; i2; i++) ?{ ? ?h1 = pbSrc[2*i]; ? ?h2 = pbSrc[2*i+1];s1 = toupper(h1) - 0x30; //toupper 轉換為大寫字母 ? ?if (s1 > 9) ? ? ? ?s1 -= 7; ? ?s2 = toupper(h2) - 0x30; ? ?if (s2 > 9) ? ? ? ?s2 -= 7;pbDest[i] = s1*16 + s2; ?}}十六進制轉字符串
代碼實現:
void HexToStr(char *pszDest, char *pbSrc, int nLen) {char ? ?ddl, ddh; ?for (int i = 0; i < nLen; i++) ?{ ? ?ddh = 48 + pbSrc[i] / 16; ? ? ?ddl = 48 + pbSrc[i] % 16; ? ? ?if (ddh > 57) ddh = ddh + 7; ? ? ?if (ddl > 57) ddl = ddl + 7; ? ? ?pszDest[i * 2] = ddh; ? ? ?pszDest[i * 2 + 1] = ddl;} ?pszDest[nLen * 2] = '\0'; }或者:
u16 Hex2StringArray (u8 *pSrc, ?u16 SrcLen, u8 *pObj) {u16 i=0; ?for(i=0; ? ?i? { ?sprintf((char *)(pObj + i * 2), "%02X", *(pSrc + i)); ?} ?*(pObj + i * 2) = '\0'; ?return ?(i * 2); }效果:十六進制"0x13 0xAA 0x02",轉為字符串"13AAA2"。
字符串轉十進制
(1)若帶負號,代碼實現:
int my_atoi(const char *str) {int value = 0; ?int flag = 1; //判斷符號 ?while (*str == ' ') ?//跳過字符串前面的空格 ?{ ?str++;} ?if (*str == '-') ?//第一個字符若是‘-’,說明可能是負數 ?{ ? ? ?flag = 0; ? ? ?str++; ?} ?else if (*str == '+') //第一個字符若是‘+’,說明可能是正數 ?{ ? ? ?flag = 1; ? ? ?str++; ?}//第一個字符若不是‘+’‘-’也不是數字字符,直接返回0 ?else if (*str >= '9' || *str <= '0') ?{ ? ? ?return 0; ?} ?//當遇到非數字字符或遇到‘\0’時,結束轉化 ?while (*str != '\0' && *str <= str="">= '0') ?{ ? ? ?value = value * 10 + *str - '0'; //將數字字符轉為對應的整形數? ??str++; ?} ?if (flag == 0) //負數的情況 ?{ ? ? ?value = -value; ?} ? return value; }效果:字符串"-123"轉為"-123"。
(2)若不帶負號,代碼實現:
void StrtoDec(uint32_t *pbDest, char *pbSrc, int nLen) {int i; ?int tmp=0; ?if(nLen > 10) ? ? ?*pbDest = 0; ?tmp = 1; ?*pbDest = 0; ?for (i=nLen-1; i>=0; i--) ?{ ? ? ?*pbDest += tmp*(*(pbSrc+i)-'0'); ? ? ?tmp = tmp*10; ?} }效果:字符串"123"轉為"123"。
(3)包含轉為浮點數,代碼實現:
//m^n函數 //返回值:m^n次方. u32 NMEA_Pow(u8 m,u8 n) {u32 result=1; ?while(n--)result*=m; ?return result; } //str轉換為數字,以','或者'*'結束 //buf:數字存儲區 //dx:小數點位數,返回給調用函數 //返回值:轉換后的數值 int NMEA_Str2num(u8 *buf,u8*dx) {u8 *p=buf; ?u32 ires=0,fres=0; ?u8 ilen=0,flen=0,i; ?u8 mask=0; ?int res; ?while(1) //得到整數和小數的長度 ?{ ? ? ?if(*p=='-'){mask|=0X02;p++;}//是負數 ? ? ?if(*p==','||(*p=='*'))break;//遇到結束了 ? ? ?if(*p=='.'){mask|=0X01;p++;}//遇到小數點了 ? ? ?else if(*p>'9'||(*p<'0')) ? //有非法字符 ? ? ?{ ? ? ? ?ilen=0; ? ? ? ?flen=0; ? ? ? ?break; ? ? ?} ? ? ?if(mask&0X01)flen++; ? ?else ilen++; ? ?p++; ?} ?if(mask&0X02)buf++; //去掉負號 ?for(i=0;i? { ? ? ?ires+=NMEA_Pow(10,ilen-1-i)*(buf[i]-'0'); ?} ?if(flen>5)flen=5; ? //最多取5位小數 ?*dx=flen; ? ? ? ? ? //小數點位數 ?for(i=0;i? { ? ? ?fres+=NMEA_Pow(10,flen-1-i)*(buf[ilen+1+i]-'0'); ?} ?res=ires*NMEA_Pow(10,flen)+fres; ?if(mask&0X02)res=-res; ?return res; }效果:字符串"123.456"先轉為"123456",然后除以1000得到"123.456"。
聲明:
本文于網絡整理,版權歸原作者所有,如來源信息有誤或侵犯權益,請聯系我們刪除或授權事宜。
總結
以上是生活随笔為你收集整理的C语言 | 6种常用的转换工具函数盘点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 元大都遗址位于现在哪里(元朝大都是现在的
- 下一篇: C语言中实现边沿函数算法及应用,这是抛弃