• <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>
            隨筆-161  評(píng)論-223  文章-30  trackbacks-0
               上次介紹了一種字符串轉(zhuǎn)化為16進(jìn)制顯示的算法,并封裝成了API,這個(gè)API可用于串口收到數(shù)據(jù)后按16進(jìn)制顯示字符串,這次介紹串口按16進(jìn)制發(fā)送字符串的算法,使用基于字符類型參數(shù)的模板函數(shù)實(shí)現(xiàn)。算法原理是遍歷字符串,將在區(qū)間'0'--'9','A'--'F','a'--'f'的字符轉(zhuǎn)化成對(duì)應(yīng)的16進(jìn)制整數(shù)(范圍為閉區(qū)間0-15),如遇到連續(xù)2個(gè)可以轉(zhuǎn)換的字符,則將它們存儲(chǔ)在一個(gè)無(wú)符號(hào)字節(jié)內(nèi),如遇到不能轉(zhuǎn)化的字符,則略過(guò)繼續(xù)。代碼如下:
             1/**
             2    @brief 將字符轉(zhuǎn)化為對(duì)應(yīng)的10進(jìn)制數(shù)整數(shù) ASCII版本 
             3    * 若字符不能轉(zhuǎn)化則返回-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 將字符串轉(zhuǎn)化成對(duì)應(yīng)的16進(jìn)制數(shù)形式存儲(chǔ)
            22    @param template charT 源字符類型
            23    @param src 源數(shù)據(jù)串
            24    @param size 要轉(zhuǎn)換的長(zhǎng)度,字符數(shù)
            25    @param ByteArray 存放結(jié)果的字節(jié)數(shù)組
            26
            27    * 如字符串80 12 34 46 AD FF,對(duì)應(yīng)的就是0x80,0x12,0x34,0x46,0xAD,0xFF
            28    該函數(shù)會(huì)自動(dòng)過(guò)濾不能轉(zhuǎn)換的字符,可轉(zhuǎn)換字符范圍在0--9,a--f,A--F區(qū)間   
            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 將字符串轉(zhuǎn)化成對(duì)應(yīng)的16進(jìn)制數(shù)形式存儲(chǔ)
            58    @param template charT 源字符類型
            59    @param src 源數(shù)據(jù)串
            60    @param ByteArray 存放結(jié)果的字節(jié)數(shù)組  
            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 春秋十二月 閱讀(3106) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Algorithm
            久久精品国产福利国产琪琪| 久久精品国产亚洲AV蜜臀色欲 | 人人狠狠综合久久亚洲婷婷| 欧美久久综合性欧美| 国产精品综合久久第一页| 久久无码人妻精品一区二区三区| 九九精品久久久久久噜噜| 久久国产精品77777| 97久久精品人人澡人人爽| 久久中文字幕人妻熟av女| 国产午夜福利精品久久2021| 久久人人爽人人精品视频| 色欲av伊人久久大香线蕉影院| 国产AⅤ精品一区二区三区久久| 久久精品国产免费观看| 久久国产成人午夜AV影院| 国产成人无码久久久精品一| 午夜精品久久久久久影视riav| 狠狠干狠狠久久| 色综合久久久久综合体桃花网| 久久久久久国产精品无码下载| 国产∨亚洲V天堂无码久久久 | 人妻精品久久久久中文字幕一冢本| 91性高湖久久久久| 精品久久人妻av中文字幕| 久久亚洲精品国产精品婷婷| 欧美国产成人久久精品| 精品久久人人爽天天玩人人妻| 国产午夜免费高清久久影院| 色欲综合久久躁天天躁蜜桃| 超级碰碰碰碰97久久久久| 日本亚洲色大成网站WWW久久| 亚洲国产精品婷婷久久| 亚洲国产精品久久久久网站 | 狠狠色丁香久久婷婷综合图片| 久久久国产精品| 日日狠狠久久偷偷色综合免费| 久久99精品国产麻豆蜜芽| 久久精品三级视频| 偷窥少妇久久久久久久久| 精品人妻伦九区久久AAA片69|