unsigned char xx[]="abc你好xyz";
cout<<xx[3]<<xx[4];
cout<<xx[5]<<xx[6];
是这样输出吗?
在一个匹配算法里要分别比较一个汉字的高端和低端吗?

解决方案 »

  1.   

    char szBuff[100];
    sprintf( szBuff, "%02X %02X %02X %02X", (unsigned char)xx[3],
                                            (unsigned char)xx[4]
                                            (unsigned char)xx[5]
                                            (unsigned char)xx[6] );
    cout<<szBuff; 
    ...
      

  2.   

    这里有一段Telnet处理汉字的编码
    你看看吧 可能对你有用处
    void CConnectThread::DealInputLine
    (int nColor,unsigned char* m_nBuf,int i,
    CString& m_inputLine,int nMaxLength)
    //nColor 表示发送的文字的颜色
    //m_nBuf 表示要发送的文字
    //m_inputLine 表示整个输入行的当前的内容
    //nMaxLength 表示一行可以输入的最多的字符个数
    {
     
     CString m_toClientStr,m_tempStr;
     CString m_comStr;
     unsigned char nChar;
     int nLength;
         if(m_nBuf[i]==8)  //回退一个字符
    {
    if(m_inputLine.GetLength()>0)  //有字符才可以回退
    {
    nLength=m_inputLine.GetLength();
    nChar=m_inputLine.GetAt(nLength-1);
      if(nChar< =128)  //处理非汉字字符
      {
      m_tempStr=8; //表示一个回退符
      m_comStr=m_tempStr+" "+m_tempStr;
    m_toClientStr=m_ScreenSet.
    CombineOneLine(m_comStr);
    m_clientSocket->Send,
    m_toClientStr.GetLength());
         //删除一个字符
    m_inputLine=m_inputLine.Left
    (m_inputLine.GetLength()-1);
         //光标回退一步
       m_ScreenSet.CursorLeft(1);
    }
    else if(nChar>128 && nChar< 255) 
    //如果是汉字字符就回退两个字符
    {
    m_tempStr=8;
    m_tempStr=m_tempStr+m_tempStr;
    m_comStr=m_tempStr+"  "+m_tempStr;
    m_toClientStr=m_ScreenSet.CombineOneLine(m_comStr);
    m_clientSocket->Send>,m_toClientStr.GetLength());
        //删除一个汉字
    m_inputLine=m_inputLine.Left(m_inputLine.GetLength()-2);
        //光标回退一个汉字
    m_ScreenSet.CursorLeft(2);
    }
    m_ChineseFlag=FALSE;
            }
    }
    else if(m_nBuf[i] >=32 && m_nBuf[i]< =128) //处理非汉字字符
    {
    if(m_inputLine.GetLength()< =nMaxLength)
    {
    m_tempStr=m_nBuf[i];
    m_inputLine=m_inputLine+m_tempStr;
          m_toClientStr=m_ScreenSet.SetHighColor()+
                         m_ScreenSet.CombineOneLine(nColor,
                         m_ScreenSet.m_CurrentPos,m_tempStr);
    m_clientSocket->Send,m_toClientStr.GetLength());
    }
    }

    //考虑汉字的发送和接收
    else if(m_nBuf[i]>128 && m_nBuf[i]< 255)
    {
         if(m_inputLine.GetLength()< =nMaxLength)
         {
    if(m_ChineseFlag==FALSE)
    {
      m_tempStr=m_nBuf[i];
                      m_inputLine=m_inputLine+m_tempStr;
      m_ChineseFlag=TRUE;
    }
       else
       {
               m_tempStr=m_nBuf[i];
                       m_inputLine=m_inputLine+m_tempStr;
       m_tempStr=m_inputLine.Right(2);
                       m_toClientStr=m_ScreenSet.SetHighColor()+
                       m_ScreenSet.CombineOneLine(nColor,
                       m_ScreenSet.m_CurrentPos,m_tempStr);
    m_clientSocket->Send
         (m_toClientStr,m_toClientStr.GetLength());
       m_ChineseFlag=FALSE;
    }
    }

    }
    ----