前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[MFC]用CString表示的HEX和ASCII之间转换

[MFC]用CString表示的HEX和ASCII之间转换

作者头像
祥知道
发布2020-03-10 15:03:30
1.4K0
发布2020-03-10 15:03:30
举报
文章被收录于专栏:祥的专栏

原创文章,欢迎转载。转载请注明:转载自 祥的博客

原文链接:http://blog.csdn.net/humanking7/article/details/48111411


预期效果

在写串口程序的时候用到了要用 HEXASCII 之间的互相转换,这个是很简单,但是我用的是MFC中的 CString 来表示HEX的数字,而且中间要考虑一下HEX数字之间有空格间隔和无空格间隔等问题,类似的效果如下:

w1
w1
w2
w2

其实本质不是转换而是现实转换的效果( 有点绕,只是为了给人看 )

代码实现

ASCII转成HEX显示出来( 其实是CString之间的显示效果转换 )

代码语言:javascript
复制
    CString CSerialPortTestDlg::Ascii2Hex(CString str_ASCII)
    {//转HEX
        int i;
        int length = str_ASCII.GetLength();
        CString str_HEX;
        CString temp;   

        for (i=0; i<length; i++)
        {       
            temp.Format("%2X ", str_ASCII.GetAt(i));
            str_HEX = str_HEX + temp;       
        }

        return str_HEX;
    }

HEX转成ASCII显示出来( 其实是CString之间的显示效果转换 )

代码语言:javascript
复制
    CString CSerialPortTestDlg::Hex2Ascii(CString str_HEX)
    {//转ASCII
        int i,num,cnt;
        BOOL is_space = FALSE;
        int length = str_HEX.GetLength();//CString类型的HEX
        CString str_ASCII;//最终转换出的ASCII
        char* char_ASCII = (char*)malloc(length*sizeof(char));//实际上远远小于这个数据 
        memset(char_ASCII, 0, length*sizeof(char));
        str_ASCII.Empty();
        char char_temp;
        num = 0;
        cnt = 0;

        for (i=0; i<length; i++)
        {
            char_temp = str_HEX.GetAt(i);
            if (' '==char_temp || '\n'==char_temp || '\t'==char_temp || '\r'==char_temp)
            {   
                if (FALSE == is_space)
                {
                    is_space = TRUE;
                    num++;
                }
                continue;//如果是空格,直接进入下一个
            }

            if (char_temp>='0' && char_temp<='9')
            {               
                char_ASCII[num] = char_ASCII[num]*16 + char_temp - '0';
                cnt++;
                is_space = FALSE;//说明这一拍 不是空格
            }
            if (char_temp>='a' && char_temp<='z')
            {
                char_ASCII[num] = char_ASCII[num]*16 + char_temp - 'a' + 10;
                cnt++;
                is_space = FALSE;//说明这一拍 不是空格
            }
            if (char_temp>='A' && char_temp<='Z')
            {
                char_ASCII[num] = char_ASCII[num]*16 + char_temp - 'A' + 10;
                cnt++;
                is_space = FALSE;//说明这一拍 不是空格
            }
            if (cnt>=2)
            {
                cnt = 0;
                num++;
                is_space = TRUE;
            }

        }
        for (i=0; i<=num; i++)
        {
            str_ASCII.AppendChar(char_ASCII[i]);
        }

        free(char_ASCII);
        return str_ASCII;
    }

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 预期效果
  • 代码实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档