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

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

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

3天內不再提示

【C語言進階】常見數據格式轉換處理的代碼實現

嵌入式物聯網開發 ? 來源:嵌入式物聯網開發 ? 作者:嵌入式物聯網開發 ? 2022-08-17 08:48 ? 次閱讀

?一、代碼示例

博主在日常工作中開展項目開發,經常遇到要將數據格式做轉換處理,比如一段字符串轉換為16進制的byte數組、或者一段16進制的byte數組轉換成字符串輸出等等。

現將這部分常見功能的實現分享給大家,希望對大家的學習和工作有所幫助。

//將一個雙字節(16位的數值)拆分為一個數組按字節存儲 如 0x1234 ==> 0x12 0x34
void uint16_2_str(uint16_t Num, uint8_t *buff2)  
{
    buff2[1] = (uint8_t)Num;
    Num >>= 8;
    buff2[0] = (uint8_t)Num;
}

//將可讀的16進制串合并成其一半長度的二進制串, 如 "12AB"-->0x12AB
void asc_2_bcd(char *psIAsc, int32_t iAscLen, char *psOBcd)
{
    char   Chtmp,ChBcd;
    int32_t    iCnt;

    for(iCnt = 0; iCnt < iAscLen; iCnt += 2)
    {
        Chtmp = psIAsc[iCnt];
        if( Chtmp >= 'A' )
        {
            Chtmp = (char)toupper((int)Chtmp) - 'A' + 0x0A;
        }
        else
        {
            Chtmp &= 0x0F;
        }
        ChBcd = (Chtmp << 4); // 獲取BCD的高位

        Chtmp = psIAsc[iCnt+1];
        if( Chtmp >= 'A' )  //zyl
        {
            Chtmp = (char)toupper((int)Chtmp) - 'A' + 0x0A;
        }
        else
        {
            Chtmp &= 0x0F;
        }
        ChBcd |= Chtmp; // 獲取BCD低位

        psOBcd[iCnt/2] = ChBcd;
    }
}

//將二進制源串分解成雙倍長度可讀的16進制串, 如 0x12AB-->"12AB"
void bcd_2_asc(uint8_t *psIHex, int32_t iHexLen, char *psOAsc)
{
    static const char szMapTable[17] = {"0123456789ABCDEF"};
    int32_t   iCnt,index;
    unsigned char  ChTemp;

    for(iCnt = 0; iCnt < iHexLen; iCnt++)
    {
        ChTemp = (unsigned char)psIHex[iCnt];
        index = (ChTemp / 16) & 0x0F;
        psOAsc[2*iCnt]   = szMapTable[index];
        ChTemp = (unsigned char) psIHex[iCnt];
        index = ChTemp & 0x0F;
        psOAsc[2*iCnt + 1] = szMapTable[index];
    }
}

// 同bcd_2_asc()函數,并在目標串后添一 '\0'
void bcd_2_asc0(uint8_t *psIHex, int32_t iHexLen, char *pszOAsc)
{
    bcd_2_asc((uint8_t *)psIHex, iHexLen, pszOAsc);
    pszOAsc[2*iHexLen] = 0;
}

// 對一段字符串pszString填充前導字符ChAddChar,以便達到uiTargetLen長度
static void add_head_chars( char *pszString, int32_t iTargetLen, char ChAddChar )
{
    int32_t iLen;

    iLen = strlen((char *)pszString);
    if( iLen>=iTargetLen )
    {
        return;
    }

    memmove(pszString+iTargetLen-iLen, pszString, iLen+1);
    memset(pszString, ChAddChar, iTargetLen-iLen);
}

// 刪除一個字符串pszString中的前導字符ChRemoveChar
static void trim_head_chars(char *pszString, char ChRemoveChar)
{
    char    *p;

    if( !pszString || !*pszString )
    {
        return;
    }

    for(p=pszString; *p && *p==ChRemoveChar; p++);
    if( p!=pszString )
    {
        while( (*pszString++ = *p++) );
    }
}

//以一個字符串str,以delim為分割符號,分割成多個字符串,返回分割后的首地址
char *my_strtok(char *src, const char *delim, char *dst)
{
    if (src && *src)
    {
        char *p = strstr(src, delim); 
        if (p)
        {
            if (dst)
            {
                memcpy(dst, src, (p-src));
            }
            return ++p;
        }
        else
        {
            if (dst)
            {
                strcpy(dst, src);
            }
            return NULL;
        }
    }
    else
    {
        return NULL;
    }
}

這幾個轉換函數都是很實用的基礎函數,比如把一串字符串轉換為16進制的數組,或者把一個16進制的數組轉換為一個可顯示的字符串,在應用程序中是一種很常見的數據轉換。

大家如對實現代碼有疑問,歡迎在評論席給我留言。 @_@ ...

?二、更多分享

架構師李肯

架構師李肯全網同名),一個專注于嵌入式IoT領域的架構師。有著近10年的嵌入式一線開發經驗,深耕IoT領域多年,熟知IoT領域的業務發展,深度掌握IoT領域的相關技術棧,包括但不限于主流RTOS內核的實現及其移植、硬件驅動移植開發、網絡通訊協議開發、編譯構建原理及其實現、底層匯編及編譯原理、編譯優化及代碼重構、主流IoT云平臺的對接、嵌入式IoT系統的架構設計等等。擁有多項IoT領域的發明專利,熱衷于技術分享,有多年撰寫技術博客的經驗積累,連續多月獲得RT-Thread官方技術社區原創技術博文優秀獎,榮獲CSDN博客專家、CSDN物聯網領域優質創作者、2021年度CSDN&RT-Thread技術社區之星、2022年RT-Thread全球技術大會講師、RT-Thread官方嵌入式開源社區認證專家、RT-Thread 2021年度論壇之星TOP4、華為云云享專家(嵌入式物聯網架構設計師)等榮譽。堅信【知識改變命運,技術改變世界】!


歡迎關注我的gitee倉庫01workstation ,日常分享一些開發筆記和項目實戰,歡迎指正問題。

同時也非常歡迎關注我的CSDN主頁和專欄:

【CSDN主頁-架構師李肯】

【RT-Thread主頁-架構師李肯】

【C/C++語言編程專欄】

【GCC專欄】

信息安全專欄】

【RT-Thread開發筆記】

freeRTOS開發筆記】

有問題的話,可以跟我討論,知無不答,謝謝大家。

審核編輯:湯梓紅

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

    關注

    180

    文章

    7614

    瀏覽量

    137747
  • 代碼
    +關注

    關注

    30

    文章

    4829

    瀏覽量

    69068
  • 數組
    +關注

    關注

    1

    文章

    417

    瀏覽量

    26031
收藏 人收藏

    評論

    相關推薦

    ADC3561轉換成什么數據格式便于高速實時通過WIFI發送?

    5MHz的16位采樣率,LVDS格式數據輸出,使用串口轉WIFI模塊受限于串口波特率無法實現實時發送,請問轉換成什么數據格式便于高速實時
    發表于 11-18 08:06

    數據格式不同,如何在轉換求均值

    在圖1中,可讀取wav格式的文件,亦可播放,在后續的求均值中便會出錯,是否因為數據格式不對?或者是wav格式的文件用不用先用MATLAB轉成txt的數據然后再求,如果是那樣的話還能播放
    發表于 03-10 10:19

    怎么實現FPGA的新型數據格式轉換

    運算作為數字信號處理中最常見的運算之一,各大EDA軟件都帶有免費的浮點運算IP核。通過對IP核的生成和例化來實現浮點運算,把FPGA設計者從繁重的代碼編寫中解脫了出來,同時可以對IP核
    發表于 08-29 06:50

    如何實現新型數據格式轉換

    浮點運算作為數字信號處理中最常見的運算之一,各大EDA軟件都帶有免費的浮點運算IP核。通過對IP核的生成和例化來實現浮點運算,把FPGA設計者從繁重的代碼編寫中解脫了出來,同時可以對I
    發表于 10-12 06:19

    如何實現規定數據格式的不定長數據的接收?

    如何實現規定數據格式的不定長數據的接收?
    發表于 12-09 07:48

    處理時圖片數據格式轉換需要HWC轉CHW和NCHW, 1684是否相關接口可以使用?

    處理時圖片數據格式轉換需要HWC轉CHW和NCHW, 1684是否相關接口可以使用?
    發表于 09-19 06:41

    數據格式,計算機中數據格式詳細介紹

    數據格式,計算機中數據格式詳細介紹    計算機中常用的數據表示格式有兩種,一是定點格式,二是浮點格式
    發表于 04-13 11:36 ?3721次閱讀

    新型數據格式轉換的FPGA實現

    提出了一種數據格式轉換方法。使用VHDL語言,采用流水線處理方式將ASCII碼所表示的一定范圍內的實數轉換為單精度浮點數。
    發表于 11-18 15:39 ?865次閱讀
    新型<b class='flag-5'>數據格式</b><b class='flag-5'>轉換</b>的FPGA<b class='flag-5'>實現</b>

    gps數據格式含義說明

    本內容介紹了gps數據格式的含義,給出了GPS輸出的是NMEA-0183的數據格式,GPS固定數據輸出語句($GPGGA)
    發表于 12-19 14:57 ?1.3w次閱讀

    CoolFormat3.2C語言代碼格式化工具

    CoolFormat3.2,將C語言代碼格式化的工具。
    發表于 05-20 17:01 ?20次下載

    C語言 | 用51單片機實現公歷與農歷星期的轉換(完整源代碼

    C語言 | 用51單片機實現公歷與農歷星期的轉換(完整源代碼
    發表于 11-21 11:36 ?52次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b> | 用51單片機<b class='flag-5'>實現</b>公歷與農歷星期的<b class='flag-5'>轉換</b>(完整源<b class='flag-5'>代碼</b>)

    MDB-RS232適配器數據格式分析

    MDB-RS232適配器數據格式分析。讓用戶能夠很容易理解發送和接收的數據格式。快速實現MDB接口的紙幣器,硬幣器和非現金支付刷卡器的數據解析。
    發表于 04-27 15:50 ?7次下載

    C語言進階C語言指針的高階用法

    C語言進階C語言指針的高階用法
    的頭像 發表于 08-31 13:24 ?2411次閱讀

    串口通訊的基本概念、數據格式

    本文介紹了串口通訊的基本概念、數據格式、通訊方式、典型的串口通訊標準等內容。
    的頭像 發表于 04-23 11:13 ?5816次閱讀
    串口通訊的基本概念、<b class='flag-5'>數據格式</b>

    一個工具搞定標注數據格式轉換

    Datumaro 是支持命令行調用的模式,因此我們可以非常方便地使用 1 行命令完成 2 種不同格式數據轉換,下面我將基于命令行模式,演示一下 Datumaro 處理標注
    的頭像 發表于 06-13 17:00 ?1076次閱讀
    一個工具搞定標注<b class='flag-5'>數據格式</b><b class='flag-5'>轉換</b>
    主站蜘蛛池模板: 黄色福利小视频 | 成人久久久 | 亚欧洲乱码专区视频 | 日本69式xxx视频 | 亚洲精品久久久久午夜三 | 午夜视频在线观看免费观看在线观看 | 国产香蕉在线视频 | 亚洲偷偷| 噜噜噜天天躁狠狠躁夜夜精品 | 免费国产午夜在线观看 | 国产小视频在线观看www | 俺去啦五月| 亚洲视频www | 亚洲综合成人网在线观看 | 亚洲国产成人久久一区www | 伊人久久大香线蕉影院95 | 扛着高跟鞋丝袜腿呻吟视频 | 国产伦精品一区二区三区免费 | 亚洲成a人v在线观看 | 未成人禁止视频高清在线观看 | 久久99热久久精品 | 久精品在线观看 | 中文字幕精品一区二区三区视频 | 天天干夜夜欢 | 成人一级毛片 | 久久免费观看国产精品 | 免费恐怖片 | 亚洲丁香 | 亚洲一区高清 | 亚洲人成网站色在线观看 | 免费黄色大片视频 | 热久久最新地址 | 老色批午夜免费视频网站 | 奇米四色7777 | 亚洲福利一区 | 精彩视频一区二区三区 | 亚洲免费毛片 | 亚洲 欧美 另类 综合 日韩 | 久久国产热视频 | 天天av天天翘天天综合网 | 五月天婷婷视频在线观看 |