?9) ????????????s1?-=?7; ????????s2?=?to" />

色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言常用轉換函數實現原理

哈哈hfgfdf ? 來源:嵌入式學習資料 ? 作者:嵌入式學習資料 ? 2023-07-01 08:43 ? 次閱讀

編程時,經常用到進制轉換、字符轉換。比如軟件界面輸入的數字字符串,如何將字符串處理成數字呢?今天就和大家分享一下。

01

字符串轉十六進制

代碼實現:


voidStrToHex(char*pbDest,char*pbSrc,intnLen) { charh1,h2; chars1,s2; inti; for(i=0;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; } }

02

十六進制轉字符串

代碼實現:


voidHexToStr(char*pszDest,char*pbSrc,intnLen) { charddl,ddh; for(inti=0;i57)ddh=ddh+7; if(ddl>57)ddl=ddl+7; pszDest[i*2]=ddh; pszDest[i*2+1]=ddl; } pszDest[nLen*2]=''; }

或者:


u16Hex2StringArray(u8*pSrc,u16SrcLen,u8*pObj) { u16i=0; for(i=0;i{ sprintf((char*)(pObj+i*2),"%02X",*(pSrc+i)); } *(pObj+i*2)=''; return(i*2); }

效果:十六進制:0x13 0xAA 0x02轉為字符串:”13AAA2”

03

字符串轉十進制

代碼實現: 第一種,如果帶負號 這個就是atoi函數的實現:


intmy_atoi(constchar*str) { intvalue=0; intflag=1;//判斷符號 while(*str=='')//跳過字符串前面的空格 { str++; } if(*str=='-')//第一個字符若是‘-’,說明可能是負數 { flag=0; str++; } elseif(*str=='+')//第一個字符若是‘+’,說明可能是正數 { flag=1; str++; }//第一個字符若不是‘+’‘-’也不是數字字符,直接返回0 elseif(*str>='9'||*str<=?'0')? ????{ ????????return?0;???? ????} ????//當遇到非數字字符或遇到‘’時,結束轉化 ????while?(*str?!=?''?&&?*str?<=?'9'?&&?*str?>='0') { value=value*10+*str-'0';//將數字字符轉為對應的整形數 str++; } if(flag==0)//負數的情況 { value=-value; } returnvalue; }

效果:字符串:”-123” 轉為 -123

第二種,如果不帶負號


voidStrtoDec(uint32_t*pbDest,char*pbSrc,intnLen) { inti; inttmp=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

第三種:包含轉為浮點數


//m^n函數 //返回值:m^n次方. u32NMEA_Pow(u8m,u8n) { u32result=1; while(n--)result*=m; returnresult; } //str轉換為數字,以','或者'*'結束 //buf:數字存儲區 //dx:小數點位數,返回給調用函數 //返回值:轉換后的數值 intNMEA_Str2num(u8*buf,u8*dx) { u8*p=buf; u32ires=0,fres=0; u8ilen=0,flen=0,i; u8mask=0; intres; while(1)//得到整數和小數的長度 { if(*p=='-'){mask|=0X02;p++;}//是負數 if(*p==','||(*p=='*'))break;//遇到結束了 if(*p=='.'){mask|=0X01;p++;}//遇到小數點了 elseif(*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; returnres; }

效果:字符串:”123.456” 先轉為 123456,然后除以1000得到123.456

04

十進制轉字符串

代碼實現: 如果只是單個十進制轉字符串,使用sprintf函數就可以了。 如果是十進制數組:


u16DectoStr(u8*pSrc,u16SrcLen,u8*pObj) { u16i=0; for(i=0;i{ sprintf((char*)(pObj+i*2),"%02d",*(pSrc+i)); } *(pObj+i*2)=''; return(i*2); }

效果:十進制數組13 14轉為字符串“1314”

05

u8、u32轉換

舉個栗子:ASCII碼里 44dedffc-17a8-11ee-9c1d-dac502259ad0.png 這里寫圖片描述 字符‘A’ , 一個字節8bit ,即u8 十六進制為 0x41 二進制為 0100 0001 而對應的十進制為 65 整型65,4個字節32bit,即u32 十六進制為 0x41 二進制為 0000 0000 0000 0000 0000 0000 0100 0001 將u32數轉換成u8數組 注意:這里是字符數組,不是字符串 字符串是以空字符()結尾的char數組


voidU32ToU8Array(uint8_t*buf,uint32_tu32Value) { buf[0]=((u32Value>>24)&0xFF); buf[1]=((u32Value>>16)&0xFF); buf[2]=((u32Value>>8)&0xFF); buf[3]=(u32Value&0xFF); }

效果:整型 50 轉字符數組 {‘’,’’,’’,’2’} u8數組轉u32


voidU8ArrayToU32(uint8_t*buf,uint32_t*u32Value) { *u32Value=(buf[0]<<24)?+?(buf[1]?<<16)?+?(buf[2]?<<8)?+?(buf[3]?<<0); }

效果:字符數組 {‘’,’’,’’,’2’}轉為整型 50

06

大小端(高低位)轉換

STM32 默認是小端模式的,那么該如何轉為大端? 轉為大端


為大端: pPack[0]=(u8)((len>>8)&0xFF); pPack[1]=(u8)(len&0xFF); 為小端: pPack[0]=(u8)(len&0xFF); pPack[1]=(u8)((len>>8)&0xFF);

效果:len為數據類型為 u16(short),比如 0x11 0x22,轉為u8(usigned char)數組。 大端為:


pPack[0](0x11) pPack[1](0x22)

小端為:


pPack[0](0x22) pPack[1](0x11)

44e8a9a6-17a8-11ee-9c1d-dac502259ad0.gif

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7608

    瀏覽量

    137111
  • 轉換函數
    +關注

    關注

    0

    文章

    2

    瀏覽量

    2337
收藏 人收藏

    評論

    相關推薦

    C語言中指針函數函數指針的概念及應用示例

    C語言中,指針函數函數指針是強大且常用的工具。它們允許我們以更靈活的方式處理函數和數據,進而
    發表于 08-16 16:14 ?951次閱讀

    C語言教程之不使用strcpy()函數實現

    C語言教程之不使用strcpy()函數實現,很好的C語言資料,快來學習吧。
    發表于 04-25 15:03 ?0次下載

    C語言標準庫函數

    C語言標準庫函數,使用C語言編程時,常用到的函數
    發表于 05-11 16:41 ?0次下載

    C語言常用的預處理命令和循環左移右移函數的詳細資料概述

    本文檔的主要內容詳細介紹的是C語言常用的預處理命令和循環左移右移函數的詳細資料概述。
    發表于 10-22 08:00 ?71次下載

    C語言模擬實現strcat函數

    C語言模擬實現strcat函數
    的頭像 發表于 06-29 16:18 ?2448次閱讀

    C語言模擬實現strcmp函數

    C語言模擬實現strcmp函數
    的頭像 發表于 06-29 16:51 ?2689次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>模擬<b class='flag-5'>實現</b>strcmp<b class='flag-5'>函數</b>

    C語言編程常用的文件處理函數匯總下載

    C語言編程常用的文件處理函數匯總下載
    發表于 04-15 16:44 ?9次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>編程<b class='flag-5'>常用</b>的文件處理<b class='flag-5'>函數</b>匯總下載

    C語言怎么跳出while函數

    C語言中while函數是經常用到的,這里說一下可以跳出while函數的幾種方法。
    的頭像 發表于 06-17 15:40 ?3.7w次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>怎么跳出while<b class='flag-5'>函數</b>

    C語言函數速查手冊

    c\c++語言函數速查手冊
    發表于 06-30 14:48 ?11次下載

    C語言-內聯函數、遞歸函數、指針函數

    這篇文章介紹C語言的內聯函數、遞歸函數函數指針、指針函數、局部地址、const關鍵字、exte
    的頭像 發表于 08-14 10:03 ?1699次閱讀

    C語言函數參數介紹

    C語言數組元素作函數實參 數組元素可以用作函數實參,不能用作形參。 C語言在用數組元素作
    的頭像 發表于 03-10 14:30 ?2425次閱讀

    c語言max函數在哪個庫

    C語言的max函數并不屬于標準C庫,它通常是由程序員自己編寫的一個宏定義。max函數用于比較兩個數的大小,返回較大的數值。 為了提供更多詳實
    的頭像 發表于 11-22 10:18 ?3557次閱讀

    c語言gets函數可以輸入數字嗎

    來了解一些與輸入有關的C語言函數C語言提供了許多函數來從用戶獲取輸入,包括scanf、fget
    的頭像 發表于 11-24 10:00 ?1619次閱讀

    c語言源程序main函數的位置

    C語言源程序中的main函數是程序的入口點,它被認為是C語言程序的起點。在執行程序時,操作系統將首先定位到main
    的頭像 發表于 11-24 10:23 ?2622次閱讀

    使用C語言實現函數模板

      用C語言能不能實現一個通用的函數,既能完成整數的相加,又能完成浮點數的相加?
    的頭像 發表于 11-09 11:38 ?414次閱讀
    主站蜘蛛池模板: 人妻中文字幕无码系列| 美女隐私黄www视频| 亚洲视频欧美视频| 久久爱狠狠综合网| 2020亚洲国产在线播放在线| 欧美性猛交AAA片| 国产成人免费不卡在线观看| 亚洲精品久久国产高清| 浪潮AV色综合久久天堂| ewp绞死vk失禁编| 午夜影院c绿象| 快插我我好湿啊公交车上做| 成人免费在线视频| 小学生偷拍妈妈视频遭性教育 | 日本又黄又裸一级大黄裸片| 超碰在线vip| 人妻换人妻AA视频| 朝鲜美女bbwbbw撒尿| 色婷婷综合久久久中文字幕 | 99视频网站| 日日夜夜天天操| 国产精品久久久久久人妻精品蜜桃| 十分钟免费观看大全视频| 国产成人 免费观看| 亚洲 日韩 自拍 视频一区 | 国产麻豆精品传媒AV国产在线| 亚洲 日韩 欧美 国产专区| 精品久久久麻豆国产精品| 自拍区偷拍亚洲视频| 欧美fxxx| 国产精品乱码色情一区二区视频| 亚洲理论在线a中文字幕| 久久久无码精品亚洲A片猫咪 | 精品一二三区久久AAA片| 中国少妇内射XXXX狠干| 欧美日韩中文在线字幕视频| 国产爱豆果冻传媒在线观看| 亚洲精品AV一区午夜福利| 美女国产毛片A区内射| 国产成人AV永久免费观看| 一天不停的插BB十几次|