今天为了完成老师布置的一个CRC(循环冗余校检)的编码作业,其中有一个子程序是要从十进制转成二进制字符串显示!不做不知道~~~做起来竟然调试得我没有脾气~~!!想不到以为很简单,竟然是要考虑很多东西的哦呵~~~差点受打击了~~~(因为方便的原因用上到MFC里的CString类)
//十进制转二进制
void CCRC::DecToBinary( CString & ChangeString )
{
//先将字符串型的数转为长整型整数
unsigned long num = atol(ChangeString.GetBuffer(ChangeString.GetLength()));
unsigned long temp = 1;
int k = 0;
//求出最大不超过当前数的2次幂,设置字符串长度
while ( temp < num )
{
k++;
temp*=2;
}
//重新设置字符串长度
ChangeString.GetBufferSetLength(k);
ChangeString.SetAt(0,’1′);
temp /= 2;
num -= temp;
k = 1;
//当转换数大于0,找出一个不大于num的2次幂数,
while( num >= 0 && temp != 0)
{
temp /= 2; //这一句非常重要
while( num < temp )
{
//当temp小于num时,置0
ChangeString.SetAt(k++,’0′);
temp /= 2;
}
//这个条件是处理最后一位时用到的
if ( num != 0)
ChangeString.SetAt(k++,’1′);
num -= temp;
}
}