• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-159  評論-223  文章-30  trackbacks-0
               上次介紹了一種字符串轉化為16進制顯示的算法,并封裝成了API,這個API可用于串口收到數據后按16進制顯示字符串,這次介紹串口按16進制發送字符串的算法,使用基于字符類型參數的模板函數實現。算法原理是遍歷字符串,將在區間'0'--'9','A'--'F','a'--'f'的字符轉化成對應的16進制整數(范圍為閉區間0-15),如遇到連續2個可以轉換的字符,則將它們存儲在一個無符號字節內,如遇到不能轉化的字符,則略過繼續。代碼如下:
             1/**
             2    @brief 將字符轉化為對應的10進制數整數 ASCII版本 
             3    * 若字符不能轉化則返回-1
             4*/

             5template<typename charT>
             6inline char ConvertHexChar(charT ch)
             7{
             8    if(ch>=(charT)'0'&&ch<=(charT)'9')
             9        return ch-(charT)'0';
            10    else if(ch>=(charT)'A'&&ch<=(charT)'F')
            11        return ch-(charT)'A'+10;
            12    else if(ch>=(charT)'a'&&ch<=(charT)'f')
            13        return ch-(charT)'a'+10;
            14    else 
            15        return -1;
            16}

            17
            18typedef std::vector<unsigned char> CByteArrayEx;
            19
            20/**
            21    @brief 將字符串轉化成對應的16進制數形式存儲
            22    @param template charT 源字符類型
            23    @param src 源數據串
            24    @param size 要轉換的長度,字符數
            25    @param ByteArray 存放結果的字節數組
            26
            27    * 如字符串80 12 34 46 AD FF,對應的就是0x80,0x12,0x34,0x46,0xAD,0xFF
            28    該函數會自動過濾不能轉換的字符,可轉換字符范圍在0--9,a--f,A--F區間   
            29*/

            30template<typename charT>
            31inline void StrToHex(const charT* src,size_t len,CByteArrayEx& ByteArray)
            32{
            33    char low = -1, high = -1;
            34    for (size_t n = 0; n < len; )
            35    {
            36        high = ConvertHexChar(src[n++]); 
            37        if (-1 == high)
            38        {
            39            continue;
            40        }

            41        if (n >= len)
            42        {
            43            ByteArray.push_back(high);
            44            break;
            45        }

            46        low = ConvertHexChar(src[n++]);
            47        if (-1 == low)
            48        {
            49            ByteArray.push_back(high);
            50            continue;
            51        }

            52        ByteArray.push_back(high * 16 + low);  
            53    }

            54}

            55
            56/**
            57    @brief 將字符串轉化成對應的16進制數形式存儲
            58    @param template charT 源字符類型
            59    @param src 源數據串
            60    @param ByteArray 存放結果的字節數組  
            61*/

            62template<typename charT>
            63inline void StrToHex(const charT* src,CByteArrayEx& ByteArray)
            64{
            65    StrToHex(src,select_variable<is_ansi_char<s_charT>::value>(strlen,wcslen)(src),ByteArray);
            66}
             
            posted on 2009-07-12 16:58 春秋十二月 閱讀(3104) 評論(0)  編輯 收藏 引用 所屬分類: Algorithm
            国产午夜福利精品久久| 久久久久亚洲AV无码专区网站 | 亚洲国产成人久久笫一页| 青青青青久久精品国产h| 99久久99久久精品国产片果冻| 久久久99精品成人片中文字幕| 午夜精品久久久久久久久| 国产高潮久久免费观看| 久久久SS麻豆欧美国产日韩| 狠狠色丁香婷婷久久综合不卡| 久久se精品一区精品二区国产 | 国产亚洲色婷婷久久99精品| 99久久国产综合精品成人影院| 伊人久久精品影院| 办公室久久精品| 色婷婷综合久久久久中文一区二区| 丁香五月综合久久激情| 久久精品a亚洲国产v高清不卡| 久久乐国产综合亚洲精品| 国产AV影片久久久久久| 国产成人精品综合久久久久| 久久久国产精品| 狠狠色丁香婷综合久久| 久久久久青草线蕉综合超碰| 亚洲精品乱码久久久久久不卡| 99久久国产综合精品五月天喷水| 国内精品久久久久伊人av| 久久婷婷午色综合夜啪| 久久人人爽人爽人人爽av| 久久97久久97精品免视看| 国产精品视频久久久| 精品熟女少妇av免费久久| 麻豆亚洲AV永久无码精品久久| 精品国产日韩久久亚洲| 狠狠色伊人久久精品综合网| 97精品伊人久久久大香线蕉| 99久久精品费精品国产| 久久精品国产色蜜蜜麻豆| 久久久精品久久久久特色影视| 精品无码久久久久久久动漫| 欧美午夜A∨大片久久 |