以下是此段代码:
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 所指的内存块中的二进制是正确的。
请高手们帮我分析下这是怎么回事呢?谢谢
第一次发贴,没分的。
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 所指的内存块中的二进制是正确的。
请高手们帮我分析下这是怎么回事呢?谢谢
第一次发贴,没分的。
我试过,如果有 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);
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;就什么都不做了