MFC中给IDC_EDIT1中定义一个cstring变量m_string, 要求在EDIT1中输入16进制的字符串如:0102 之类的.
如果直接给m_string 赋值 是这样表示16进制字符串嘛?  : "\X01\X02"   
                 小弟对这些(进制.类型转换)的基本概念理解不深,请大家讲清楚.
    把m_string的值转换成(BYTE * ) 怎么转换?运算之后.再把BYTE结果输出到EDIT2上面的cstring类型的m_OUT上面来....?
   PS: 小弟想加强这方面的基本知识,谢谢大家 给出好的书籍和资料.

解决方案 »

  1.   

    参与运算 不需转换 计算机还都是二进制呢 
    要想显示出来 那就str.Format("%x",Num16);
      

  2.   

    什么叫16进制的字符串把字符串转化成16进制的数吧..?又把16进制转化成 BYTE...?
    CString 对象---> 16进制 ---> BYTE ..是这意思吧..?
      

  3.   

    1 ;取m_string 的值把16进制转换成16进制的ascii字符串,进行运算
    2 ;怎么把STRING转成BYTE *
    3 ;BYTE[16进制的ascii字符串] 输出到m_OUT中 
      

  4.   

    你直接输入"\x1A..."这种形式当然不行了,你想要达到的目的就是输入"1A",程序获得的是0x1A这个值吧
    其实转换起来很简单,从数值到字符串可以直接用_itoa, _i64toa, _ui64toa, _itow, _i64tow, _ui64tow这些函数,从字符串到数值,如果是十进制的就可以直接用atof, _wtof, atoi, _wtoi, _atoi64, _wtoi64, atol, _wtol
    你这种情况是字符串是16进制表示,转换成数值就需要字节写个函数BYTE GetByte(char cHigh, char cLow)
    {
      if (cHigh >= '0' && cHigh <= 'F' && cLow >= '0' && cLow <= 'F')
      {
        return BYTE((cHigh - '0') * 16 + (cLow - '0'));
    //或者return BYTE((cHigh - '0') < 4 + (cLow - '0'));
    //或者return BYTE(((cHigh - '0') < 4) & (cLow - '0'));
      }  return 0;
    }
      

  5.   

    TO 3 :运算函数要求输入:BYTE *
    TO 4 :输入的就是16进制: 10E02D,你的思路是对的
      

  6.   

    搞来搞去
    都是CString对象..!-----
    1. strtol();
    2. Format();
    3. Format();
      

  7.   

    TO LIUXIUK :  先说:string转成 BYTE *P[100]和STROL的例子写出来嘛!
    TO 10 : 
    FORMAT()的用法是:
    str.Format(   "%02x   ",P );
    这样可以把字符串 数组内 字符输出嘛?
      

  8.   

    strtol()...这些用法
    MSDN都有例子肯定比我写的好..!  hehe自己查下就会了
    不是太难..
      

  9.   

    首先把整个 string 按要求转成多个数据型式,例如 输入 "123456 09 08 07" 转成 "12" "34" "56" "09" "08" "07"再分别用 sscanf 操作,如下sscanf("12","%x",nV1);  转换后 nV1 = 0x12;
    sscanf("34","%x",nV1);  转换后 nV1 = 0x34;
    ...
      

  10.   

    http://topic.csdn.net/u/20071107/17/eb554dcf-6b4e-4395-8628-120fb1d43922.html
    LZ最好继承CEdit,输入时过滤其它字符
    转换(上面的链接)
    输出用m_OUT.Format();
      

  11.   

    改用STL的string, 操作方便点----
    string DesStr = "{12 03 3a...}"; //协议的原始数据;然后对DesStr提取...   //提取方法就不说了..譬如:  提取3a后..string str = "3a"; //3a为16进制, 16进制就是无符号的int<<==>>MFC的BYTE型
    char *ptr;
    BYTE p[100];
    CString temstr;int index = strtol(str.c_str(), &ptr, 16);
    p[0] = (BYTE)index;p[0] 就是想要的数据了..输出到Edit控件, 就不难了吧..
      

  12.   

    再废话一句..
    上面Saiman的方法没试过
    应该也是可行的.. 貌似比我想的要简单点..! hehe----temstr //edit控件变量temstr.Format(...);记得 Updatedata(TRUE);
      

  13.   

    是Updatedata(FALSE);不行了
    感冒脑袋不转了..!
      

  14.   

     cstring 和BYTE * 
    16进制和ASCII码之间的关系谁能再说清楚点呀~
      

  15.   

    进制无所谓,16进制, 二进制,8进制,这只是显示问题,如果是同一个变量,它们的实质是一样的。
    但int变量里的‘0’与字符串里的‘0’(实际是48)是不一样的。
      

  16.   


    忘了问了.1 怎么把"1A2B3C4D"转换成ASCII码呀?
            2 想赋给m_string  16进制字符串:如想表示成0X11 0X22 一个字节的数连接一个字节的输入应该怎样?
      

  17.   

    在computer里面统统是0和1几进制那还不在于你控制..?
    你想输出 1进制 \ 2进制... 
    都可以!
      

  18.   

    "\X01\X02\X03"这样的16进制表达有问题嘛
      

  19.   

    LZ,太乱了。
    "\X01\X02\X03 " 这是字符串,相当于"X01X02X03"
    "\X01\X02\X03 " 这个字符串与16进制没有必然联系。
    BYTE bt = 0x1A;
    char ch[] ="0x1A"; //或CString str("0x1A"); 
    char ch1[] ="1A";
    这三个互不一样。
    ch1,ch已经是ASCII了。
     
      

  20.   

    再提一个问题:函数的嵌套调用怎么调用法 
    a.cpp 内函数A
    B.CPP 内函数B 
    主函数: #INCLUDE  "B.CPP" 就可以直接用A函数嘛.需要加在EXTERN _STDCALL _DECLSPEC 嘛?
     谁能解释哈......多给分!
      

  21.   

    .................
    ----------------
    A.CPPVOID FUNA(){}
    ----------------
    A.HPP
    VOID FUNA();
    ---------------B.CPPVOID FUNB(){}
    ---------------
    B.HPP
    VOID FUNB();
    ---------------#INCLUDE "A.HPP"
    #INCLUDE "B.HPP"
    C.CPPMAIN(){
    FUNA();
    FUNC();
    }
    ---------------
      

  22.   

    问了几次也没有人清楚的回答 ."\X01\X02\X03"可以作为字符串输入嘛?  是否是最后输入之后就是010203