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

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

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


预期效果

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

w1

w2

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

代码实现

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

    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之间的显示效果转换 )

    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;
    }

donate

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值