最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解C語(yǔ)言常用的一些轉(zhuǎn)換工具函數(shù)

 更新時(shí)間:2020年11月10日 22:35:27   作者:三啊三水  
這篇文章主要介紹了C語(yǔ)言常用的一些轉(zhuǎn)換工具函數(shù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

1、字符串轉(zhuǎn)十六進(jìn)制

代碼實(shí)現(xiàn):

void StrToHex(char *pbDest, char *pbSrc, int nLen)
{
 char h1,h2;
 char s1,s2;
 int i;

  for (i=0; i<nLen/2; i++)
  {
    h1 = pbSrc[2*i];
    h2 = pbSrc[2*i+1];

    s1 = toupper(h1) - 0x30; //toupper 轉(zhuǎn)換為大寫(xiě)字母
    if (s1 > 9)
      s1 -= 7;
    s2 = toupper(h2) - 0x30;
    if (s2 > 9)
      s2 -= 7;

    pbDest[i] = s1*16 + s2;
  }
}

2、十六進(jìn)制轉(zhuǎn)字符串

代碼實(shí)現(xiàn):

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<SrcLen;  i++)
  {
    sprintf((char *)(pObj + i * 2), "%02X", *(pSrc + i));
  }
  *(pObj + i * 2) = '\0';
  return (i * 2);
}

效果:十六進(jìn)制:0x13 0xAA 0x02轉(zhuǎn)為字符串:”13AAA2”

3、字符串轉(zhuǎn)十進(jìn)制

代碼實(shí)現(xiàn):

第一種,如果帶負(fù)號(hào) 這個(gè)就是atoi函數(shù)的實(shí)現(xiàn):

int my_atoi(const char *str)
{
  int value = 0;
  int flag = 1; //判斷符號(hào)
  while (*str == ' ') //跳過(guò)字符串前面的空格
  {
    str++;
  }
  if (*str == '-') //第一個(gè)字符若是‘-',說(shuō)明可能是負(fù)數(shù)
  {
    flag = 0;
    str++;
  }
  else if (*str == '+') //第一個(gè)字符若是‘+',說(shuō)明可能是正數(shù)
  {
    flag = 1;
    str++;
  }//第一個(gè)字符若不是‘+'‘-'也不是數(shù)字字符,直接返回0
  else if (*str >= '9' || *str <= '0') 
  {
    return 0;  
  }
  //當(dāng)遇到非數(shù)字字符或遇到‘\0'時(shí),結(jié)束轉(zhuǎn)化
  while (*str != '\0' && *str <= '9' && *str >= '0')
  {
    value = value * 10 + *str - '0'; //將數(shù)字字符轉(zhuǎn)為對(duì)應(yīng)的整形數(shù)
    str++;
  }
  if (flag == 0) //負(fù)數(shù)的情況
  {
    value = -value;
  }
  return value;
}

效果:字符串:”-123” 轉(zhuǎn)為 -123

第二種,如果不帶負(fù)號(hào):

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” 轉(zhuǎn)為 123

第三種:包含轉(zhuǎn)為浮點(diǎn)數(shù):

//m^n函數(shù)
//返回值:m^n次方.
u32 NMEA_Pow(u8 m,u8 n)
{
  u32 result=1;  
  while(n--)result*=m;  
  return result;
}
//str轉(zhuǎn)換為數(shù)字,以','或者'*'結(jié)束
//buf:數(shù)字存儲(chǔ)區(qū)
//dx:小數(shù)點(diǎn)位數(shù),返回給調(diào)用函數(shù)
//返回值:轉(zhuǎn)換后的數(shù)值
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) //得到整數(shù)和小數(shù)的長(zhǎng)度
  {
    if(*p=='-'){mask|=0X02;p++;}//是負(fù)數(shù)
    if(*p==','||(*p=='*'))break;//遇到結(jié)束了
    if(*p=='.'){mask|=0X01;p++;}//遇到小數(shù)點(diǎn)了
    else if(*p>'9'||(*p<'0'))  //有非法字符
    {  
      ilen=0;
      flen=0;
      break;
    }  
    if(mask&0X01)flen++;
    else ilen++;
    p++;
  }
  if(mask&0X02)buf++; //去掉負(fù)號(hào)
  for(i=0;i<ilen;i++) //得到整數(shù)部分?jǐn)?shù)據(jù)
  { 
    ires+=NMEA_Pow(10,ilen-1-i)*(buf[i]-'0');
  }
  if(flen>5)flen=5;  //最多取5位小數(shù)
  *dx=flen;      //小數(shù)點(diǎn)位數(shù)
  for(i=0;i<flen;i++) //得到小數(shù)部分?jǐn)?shù)據(jù)
  { 
    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” 先轉(zhuǎn)為 123456,然后除以1000得到123.456

4、十進(jìn)制轉(zhuǎn)字符串

代碼實(shí)現(xiàn):

如果只是單個(gè)十進(jìn)制轉(zhuǎn)字符串,使用sprintf函數(shù)就可以了。

如果是十進(jìn)制數(shù)組:

u16 DectoStr (u8 *pSrc, u16 SrcLen, u8 *pObj)
{
  u16 i=0;

  for(i=0;  i<SrcLen;  i++)
  {
    sprintf((char *)(pObj + i * 2), "%02d", *(pSrc + i));
  }
  *(pObj + i * 2) = '\0';
  return (i * 2);
}

效果:十進(jìn)制數(shù)組13 14轉(zhuǎn)為字符串“1314”

5、u8、u32轉(zhuǎn)換

舉個(gè)栗子:ASCII碼里

這里寫(xiě)圖片描述 字符‘A' , 一個(gè)字節(jié)8bit ,即u8 十六進(jìn)制為 0x41 二進(jìn)制為 0100 0001

而對(duì)應(yīng)的十進(jìn)制為 65 整型65,4個(gè)字節(jié)32bit,即u32 十六進(jìn)制為 0x41 二進(jìn)制為 0000 0000 0000 0000 0000 0000 0100 0001

將u32數(shù)轉(zhuǎn)換成u8數(shù)組

注意:這里是字符數(shù)組,不是字符串

字符串是以空字符(\0)結(jié)尾的char數(shù)組

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

效果:整型 50 轉(zhuǎn)字符數(shù)組 {‘\0','\0','\0','2'}

u8數(shù)組轉(zhuǎn)u32

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

效果:字符數(shù)組 {‘\0','\0','\0','2'}轉(zhuǎn)為整型 50

6、大端小端

最后就是大小端問(wèn)題了。STM32 默認(rèn)是小端模式的,那么該如何轉(zhuǎn)為大端?

1、轉(zhuǎn)為大端

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

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

效果:len為數(shù)據(jù)類(lèi)型為 u16(short),比如 0x11 0x22,轉(zhuǎn)為u8(usigned char)數(shù)組。

大端為:

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

小端為:

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

到此這篇關(guān)于詳解C語(yǔ)言常用的一些轉(zhuǎn)換工具函數(shù)的文章就介紹到這了,更多相關(guān)C語(yǔ)言轉(zhuǎn)換工具函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言在屏幕上輸出楊輝三角

    C語(yǔ)言在屏幕上輸出楊輝三角

    這篇文章主要介紹了在屏幕上輸出楊輝三角的方法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • C語(yǔ)言 strftime 格式化顯示日期時(shí)間的實(shí)現(xiàn)

    C語(yǔ)言 strftime 格式化顯示日期時(shí)間的實(shí)現(xiàn)

    下面小編就為大家?guī)?lái)一篇C語(yǔ)言 strftime 格式化顯示日期時(shí)間的實(shí)現(xiàn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • 詳解C++?中?shared_ptr?weak_ptr

    詳解C++?中?shared_ptr?weak_ptr

    shared_ptr?是一個(gè)標(biāo)準(zhǔn)的共享所有權(quán)的智能指針,允許多個(gè)指針指向同一個(gè)對(duì)象,定義在?memory?文件中,命名空間為?std,這篇文章主要介紹了C++?中?shared_ptr?weak_ptr,需要的朋友可以參考下
    2022-07-07
  • C/C++數(shù)字與字符串互相轉(zhuǎn)換的實(shí)現(xiàn)示例

    C/C++數(shù)字與字符串互相轉(zhuǎn)換的實(shí)現(xiàn)示例

    本文主要介紹了C/C++數(shù)字與字符串互相轉(zhuǎn)換的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • vs2019 Com組件初探之簡(jiǎn)單的COM編寫(xiě)及實(shí)現(xiàn)跨語(yǔ)言調(diào)用的方法

    vs2019 Com組件初探之簡(jiǎn)單的COM編寫(xiě)及實(shí)現(xiàn)跨語(yǔ)言調(diào)用的方法

    這篇文章主要介紹了vs2019 Com組件初探之簡(jiǎn)單的COM編寫(xiě)及實(shí)現(xiàn)跨語(yǔ)言調(diào)用的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • C++實(shí)現(xiàn)LeetCode(157.用Read4來(lái)讀取N個(gè)字符)

    C++實(shí)現(xiàn)LeetCode(157.用Read4來(lái)讀取N個(gè)字符)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(157.用Read4來(lái)讀取N個(gè)字符),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 基于QT制作一個(gè)簡(jiǎn)易的傳輸文件小工具

    基于QT制作一個(gè)簡(jiǎn)易的傳輸文件小工具

    本文主要介紹了通過(guò)QT實(shí)現(xiàn)的一個(gè)文件傳輸小工具。功能就是能實(shí)現(xiàn)文件的雙向傳輸,即客戶(hù)端能傳給服務(wù)端,服務(wù)端可以傳給客戶(hù)端。文中示例代碼具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2021-12-12
  • C++?數(shù)據(jù)結(jié)構(gòu)超詳細(xì)講解順序表

    C++?數(shù)據(jù)結(jié)構(gòu)超詳細(xì)講解順序表

    程序中經(jīng)常需要將一組數(shù)據(jù)元素作為整體管理和使用,需要?jiǎng)?chuàng)建這種元素組,用變量記錄它們,傳進(jìn)傳出函數(shù)等。一組數(shù)據(jù)中包含的元素個(gè)數(shù)可能發(fā)生變化,順序表則是將元素順序地存放在一塊連續(xù)的存儲(chǔ)區(qū)里,元素間的順序關(guān)系由它們的存儲(chǔ)順序自然表示
    2022-03-03
  • C++實(shí)現(xiàn)LeetCode(200.島嶼的數(shù)量)

    C++實(shí)現(xiàn)LeetCode(200.島嶼的數(shù)量)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(200.島嶼的數(shù)量),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • c++中string和vector的詳細(xì)介紹

    c++中string和vector的詳細(xì)介紹

    這篇文章主要介紹了c++中string和vector的詳細(xì)介紹,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-09-09

最新評(píng)論

延川县| 开封县| 卢龙县| 开江县| 托克逊县| 鹤峰县| 荆门市| 周至县| 城固县| 潍坊市| 沐川县| 姜堰市| 曲松县| 阳原县| 二手房| 正阳县| 信阳市| 合川市| 达拉特旗| 抚顺县| 股票| 容城县| 漳平市| 广昌县| 嘉禾县| 沙田区| 元谋县| 尼木县| 虹口区| 平昌县| 玉环县| 寿阳县| 石林| 赞皇县| 南郑县| 安化县| 丰原市| 新宾| 鹤庆县| 杂多县| 静乐县|