以下是此段代码:
CString m_textbinary;
char *Data=new char[m_text.GetLength()*8];
char *temp;
temp=Data;
for(i=0;i<m_text.GetLength();i++)
{
   ch=m_text.GetAt(i);
   for(j=0;j<8;j++)      {         *Data=ch>>(7-j);
         ch=ch-((ch>>(7-j))<<(7-j));
         Data++;      }
}
m_textbinary=temp;
SetDlgItemText(IDC_TextBinary,m_textbinary);
以上是代码。
首先m_text(是CSTRING类型)从编辑框取了字符串。将它转成二进制。
此段代码执行结果是:m_textbinary没有值。
m_textbinary.GetLength ()等于0 ;
但是测试后发现temp 所指的内存块中的二进制是正确的。
请高手们帮我分析下这是怎么回事呢?谢谢
第一次发贴,没分的。

解决方案 »

  1.   

       *Data=ch>>(7-j); 除非你m_text的第一个字符是0xff,否则*Date肯定是0,既然Date[0]是0了,那即是后面有再多的数据,执行m_textbinary=temp后,m_textbinary都是0
      

  2.   

        如果你的目的是想把temp中的数据全部给m_textbinary,那就自己用memcpy吧,长度自己计算好
      

  3.   

    2楼说的有道理,但我还没看懂。能不能讲详细点。
    我试过,如果有  char *Data="what is he?";char *temp=Data; 
    然后CString m_textbinary=Temp ;那么m_textbinary的值是正确的。
    1楼,这段程序功能是把每个字符用8位二进制数(即将其ASCII码转成8位二进制)表示出来。
    CString m_textbinary; 
    char *Data=new char[m_text.GetLength()*8]; 
    char *temp; 
    temp=Data; 
    for(i=0;i <m_text.GetLength();i++) //循环取字符

      ch=m_text.GetAt(i); 
      for(j=0;j<8;j++)            //循环,将此字符转成8位二进制数
          { 
            *Data=ch>>(7-j);      //用位运算从左依次取二进制数
            ch=ch-((ch>>(7-j))< <(7-j));截取剩下的二进制数 
            Data++; 
          } 

    m_textbinary=temp; 
    SetDlgItemText(IDC_TextBinary,m_textbinary);
      

  4.   

       char *Data=new char[m_text.GetLength()*8]; 
       char *temp; 
       temp=Data;
       执行到这里的时候。Data中的数据时乱码对吧,因为你没初始化
       假设m_text = "123";
        接着进入for循环ch=m_text.GetAt(0) = '1'
       那执行*Data=ch>>(7-j);后*Data = 0   就是表示Data的第一个数据是0
       m_textbinary=temp;的时候,CString首先会计算temp中数据的长度,用的是strlen(Data) = 0   那接着m_textbinary=temp;就什么都不做了