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

在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

    文章

    7630

    瀏覽量

    140759
  • 轉換函數
    +關注

    關注

    0

    文章

    2

    瀏覽量

    2386
收藏 人收藏

    評論

    相關推薦
    熱點推薦

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

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

    C語言標準庫函數

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

    基于C語言標準庫函數

    基于C語言標準庫函數
    發表于 10-23 17:41 ?11次下載
    基于<b class='flag-5'>C</b><b class='flag-5'>語言</b>標準庫<b class='flag-5'>函數</b>

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

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

    C語言模擬實現strcat函數

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

    C語言模擬實現strcmp函數

    C語言模擬實現strcmp函數
    的頭像 發表于 06-29 16:51 ?2876次閱讀
    <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.8w次閱讀
    <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 ?1948次閱讀

    C語言函數參數介紹

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

    c語言max函數在哪個庫

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

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

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

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

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

    使用C語言實現函數模板

      用C語言能不能實現一個通用的函數,既能完成整數的相加,又能完成浮點數的相加?
    的頭像 發表于 11-09 11:38 ?892次閱讀
    主站蜘蛛池模板: 国产综合精品久久久久成人影 | 在线免费观看黄色小视频 | 成人淫片 | 女人张腿让男子桶免费动态图 | 国产精品露脸脏话对白 | 日韩毛片在线视频 | 夜夜澡人人爽人人喊_欧美 夜夜综合网 | 特黄特黄特色大片免费观看 | 天天cao在线| 在线观看视频你懂的 | 国产成人精品一区 | 国产亚洲欧美日本一二三本道 | 欧美成人午夜不卡在线视频 | 俄罗斯美女在线观看一区 | 欧美日韩高清一区 | 美女被网站免费看九色视频 | 日本精品视频一视频高清 | 国产精品午夜自在在线精品 | 黄色福利视频网站 | 亚洲国产色婷婷精品综合在线观看 | 色亚洲欧美| www色视频| 亚洲狠狠狠一区二区三区 | 性感美女视频黄.免费网站 性高清 | 日韩精品在线第一页 | 午夜免费啪视频 | 婷婷网址 | 四虎hu| 综合天天| 啪啪网站色大全免费 | 国产成人一区二区三中文 | www.av123| 久久精品人人爽人人爽快 | 噜噜噜久久久 | 五月激情站| 午夜三级福利 | 轻点灬大ji巴太粗太长了爽文 | 日本不卡在线观看免费v | 黄色福利视频网站 | 日日摸人人拍人人澡 | 午夜免费小视频 |