编写函数--整数转换为2进制字符串

编写函数--整数转换为2进制字符串

       问题提出

MFC自带函数_ultotint ivalue, TCHAR* szBuf, int radix;可以将整数转换为16进制。不过使用这个函数有个问题就是如果16进制的高位为零的时候,就自动忽略。

比如

WORD    wL = 0x3;

TCHAR   szStandard[5];

_itot(wL,szStandard, 2);

szStandard的结果是“11”,跟我想要的“0011”有点差距。

查来查去的又浪费时间,还是自己写转换函数吧。嘿嘿

 

■ 简单要求(式样):

输入:整数Byte,有效位为低4位。 

输出:TCHAR* 指向的数组。要求输出的值为“xxxx”格式。注意格式不是“xxxx xxxx”。因为我需要的Byte每次只是转换低4Bit

 

■ 函数实现代码:

 

void  _byte_to_bitstr(BYTE cValue, LPTSTR lpszBuf)

{
        
if  ( lpszBuf  ==  NULL )
                
return  ;

       
int  x         =   0 ;
        
int  radix  =   2 ;

        BYTE cTmpValue 
=  cValue  &   0x0F //  Only calc the low 4 Bit 

       
while (cTmpValue)
       {
           cTmpValue 
/=  radix;
           
if  (cTmpValue)
                x
++ ;
       }
        
for ( int  i  =   0 ; i  <   4 ; i ++ )                   //  result must be 0000 ~ 1111 !! 
        {
                lpszBuf[i] 
=  L ' 0 ' ;
        }
        lpszBuf[
4 =  L ' \0 ' ;

        
int  iIndex  =   3 ;
       
while ( x  >=   0  )
       {
           
const   int  v  =  cValue  %  radix;
            
if  (v  >   10 )
                  lpszBuf[iIndex] 
=   ' a '   +  v  -   10 ;
          
else
                 lpszBuf[iIndex] 
=   ' 0 '   +  v;
           
           iIndex
-- ;
          cValue 
/=  radix;
          x
-- ;
       }

}

 

 

       测试:

 

TCHAR szBuf[ 5 ];

BYTE cValue 
=   0x3 ;

_byte_to_bitstr (cValue, szBuf);

 

 

       应用

给定一个WORD wValue = 0xcc33;可以得到字符串。

1100 1100 0011 0011

 

WORD wValue  =   0xcc33 ;                                                     

CString strValue;

BYTE    cValue;

 

TCHAR               szBitArray3[
5 ];

TCHAR               szBitArray2 [
5 ];

TCHAR               szBitArray1 [
5 ];

TCHAR               szBitArray0 [
5 ];

cValue 
=  HIBYTE(wValue);

_byte_to_bitstr ((cValue 
>>   4 &   0x0F , szBitArray3);

_byte_to_bitstr ((cValue 
&   0x0F  ),                           szBitArray2);

 

cValue 
=  LOBYTE(wValue);

_byte_to_bitstr ((cValue 
>>   4 &   0x0F , szBitArray1);

_byte_to_bitstr (cValue 
&   0x0F  ,                szBitArray0);

 

strValue.Format(_T(
" %s %s %s %s " ), szBinary3, szBinary2, szBinary1, szBinary0);

 

你可能感兴趣的:(编写函数--整数转换为2进制字符串)