CString Strtemp;       Strtemp.Format("%x", chz);我想以十六进制显示       输入A  显示 41
 
       输入B  显示 40      应该怎样设置 Strtemp.Format("%x", chz);命令 

解决方案 »

  1.   

    CString Temp::GetHex(char ch)
    {
      CString str;
      str.Format(_T("%x"),ch);
      return str;
    }
      

  2.   

    char a="A";
    str.Format(_T("%x"),a);
    AfxMessageBox(str);
      

  3.   

    如果是UNICODE方式,
    TCHAR a=_T("A");
    str.Format(_T("%x"),a);
    AfxMessageBox(str);
    否则就为
    char a="A";
    str.Format("%x",a);
    AfxMessageBox(str);
      

  4.   

    用这个指令str.Format(_T("%x"),a);不行,
    我的指令是这样的:
            chz = *(char*)(rxdata+k);
                 Strtemp.Format("%x", chz);我改成
            chz = *(char*)(rxdata+k);
                 Strtemp.Format(_T("%x"), chz);
          还是不行,看看还有什么办法?
     
      

  5.   


    #include "stdafx.h"
    #include <sstream>
    #include   <iomanip> 
    using namespace std;
    int _tmain(int argc, _TCHAR* argv[])
    {
    char *msg = "汉字"; 

    ostringstream s; for(char *p = msg; *p != 0; p++) 

    s << "0x" << hex << setw(2) << setfill('0') << (unsigned int)((unsigned char)*p) << " "; 
    }

    printf("%s\n", s.str().c_str());

    system("pause");
    return 0;
    }
      

  6.   

    void CChzDlg::OnCommMscomm() 
    {
    // TODO: Add your control notification handler code here
     
            
        CChzDlg sen;
        int nEvent;
        CString m_RcvData;
        nEvent=m_ComChz.GetCommEvent();
    switch(nEvent)
    {
        case 1: sen.Onsenbtn();
                 break;
    case 2:
         VARIANT variant_inp;
       COleSafeArray safearray_inp;
       long len, k;
        BYTE rxdata[2048];
       CString strtemp;
         if(m_ComChz.GetCommEvent()==2)   
     {
          variant_inp=m_ComChz.GetInput();
          safearray_inp=variant_inp;
          len= safearray_inp.GetOneDimSize();
      for(k=0;k<len;k++)
              safearray_inp.GetElement(&k,rxdata+k);
              for(k=0;k<len;k++)
      {
       BYTE bt=*(char*)(rxdata);
                     strtemp.Format("%x",bt);
                       m_receive+=strtemp;
      }
                      m_receive+=" ";
               
      }
           UpdateData(FALSE);
       }
    }void CChzDlg::Onsenbtn() 
    {
    // TODO: Add your control notification handler code here
         UpdateData(true);
    int i,Count;
    CString m_SendData;
            m_SendData=m_send;  
    Count=m_SendData.GetLength();
    CByteArray m_Array;
    m_Array.RemoveAll();
    m_Array.SetSize(Count);
            for(i=0;i<Count;i++)
    m_Array.SetAt(i,m_SendData[i]);
    {
                    m_ComChz.SetOutput(COleVariant(m_SendData));
              }
    }
        上面的可以发送和接收数据,但是每发送一个字符串只能接收到第一个字符,是什么原因?
        
      

  7.   


    void CChzDlg::OnCommMscomm() 
    {
      Sleep(200);
       ....
    }
      

  8.   

     Sleep(200);这条指令是什么意思
      

  9.   


    char chz;
    CString strTemp;
    chz = 'A';
    strTemp.Format("%02X", chz);
      

  10.   

    // 你在variant_inp=m_ComChz.GetInput();前挂起看看
    // 如果挂起后正常,那么需要在取数前将延时,或者将RThreshold 的值设的大一点。
      

  11.   

    Sleep(200);
    我用了这个还是不行, 
    主要是   例如发送ABC这个字符串, 接收只看到A,再发送ABC还是A,再发送ABC还是A
      

  12.   

    你在variant_inp=m_ComChz.GetInput();前挂起看看是不执行这一句吗?
      

  13.   


    if(m_ComChz.GetCommEvent()==2)
    {
    k=m_ComChz.GetInBufferCount();             //接收到的字符数目 

       if(k>0) 
    {
        vResponse=m_ComChz.GetInput();     //read
    safearray_inp=vResponse;
    len=safearray_inp.GetOneDimSize(); 
    memcpy(rxdata, (unsigned char*) vResponse.parray->pvData, len);    //拷贝出数据
        rxdata[len] =0x00;
    ...... //    
       }
     
    }试试这样用memcpy
      

  14.   

    同问19楼..---不用搞这么复杂吧.. 写个映射关系不就ok了?////////////////////////////////////////////////////////////
    // Purpose: 存储结构定义
    typdef std::map<CString, CString> CodeMap;/////////////////////////////////////////////////////////////////////////////////
    // FunctionName: InitCodeMap
      void InitCodeMap(CodeMap &vMap) {
           struct {
           TCHAR SrcCode[MAX_PATH];
           TCHAR DesCode[MAX_PATH];
           } nItem [] = {
            _T("A"), _T("0X20"),
            _T("B"), _T("OX21") 
           };
          vMap.Clear();
          for ( long i = 0; i < sizeof(nItem) / sizeof(*nItem); i++ ) {
              vMap.insert(std::make_pair<CString, CString>(nItem[i].SrcCode, nItem[i].DesCode));
          }
    }/////////////////////////////////////////////////////////////////////////////////
    // FunctionName: FindCodeMap
    CString FindCodeMap(const CodeMap &vMap, const CString &sCode) {
         CString sTmp;
         if ( vMap.size() == 0 ) 
           return sTmp;
        CodeMap::iterator iRet = vMap.find(sCode);
        if ( iRet != vMap.end() )
           return (*iRet).second;
        return vTmp;
    }
      

  15.   

     rxdata[len] =0x00;这条是什么意思?,  是将rxdata送到编辑框的变量m_receive
    m_receive = rxdata;
      

  16.   

    结尾结束相当‘\0’
    m_receive="";
    m_receive+=(char *)rxdata;如果m_receive只有一个字符,并不是说你只接收到一个字符。如果你发的数据中有0x00,m_receive只显示0x00之前的数据。
      

  17.   

    if(m_ComChz.GetCommEvent()==2)
        {
            k=m_ComChz.GetInBufferCount();             //接收到的字符数目 
            
           if(k>0) 
            {
                    vResponse=m_ComChz.GetInput();     //read
                    safearray_inp=vResponse;
                    len=safearray_inp.GetOneDimSize();                 
                    memcpy(rxdata, (unsigned char*) vResponse.parray->pvData, len);    //拷贝出数据    
                      rxdata[len] =0x00;
                    m_receive="";
                    m_receive+=(char *)rxdata;
                              
           }
             
        }
    是这样的吗?
      

  18.   

    加上sleep(200)和updatedata(false)试试可以吗?
      

  19.   

    if(m_ComChz.GetCommEvent()==2)
    {
    k=m_ComChz.GetInBufferCount(); //接收到的字符数目 if(k>0) 
    {
    vResponse=m_ComChz.GetInput(); //read
    safearray_inp=vResponse;
    len=safearray_inp.GetOneDimSize(); 
    memcpy(rxdata, (unsigned char*) vResponse.parray->pvData, len); //拷贝出数据 
    rxdata[len] =0x00;
    m_receive="";
    m_receive+=(char *)rxdata;}}
    还是只能接收一个字符,是不是正常的.
      

  20.   

    你可以设置一下断点,看看rxdata的数据