背景:将两个字节 byte1和 byte2中的二进制位重新组合, byte1的低3位加上 byte2的高5位,然后形成一个新的2进制字符串str5,共8位,然后转化为整数,目前的写法是:
int byte1=0x59,byte2=0x0c,i;
CString str,str1,str3,str4,str5,byte21_11to4;
char strtemp[8],strtemp2[8];
itoa(byte1,strtemp,2);
  str1.Format("%s",strtemp);
str=(CString("00000000"+str1)).Right(8); itoa(byte2,strtemp2,2);
str3.Format("%s",strtemp2);
        str4=(CString("00000000"+str3)).Right(8);
        
        byte21_11to4=str4.Right(3)+str.Left(5);
i=TurnBinary(byte21_11to4);
str5.Format("%d",i);//str5就是最终的结果int TurnBinary(CString str)
{
int length = str.GetLength();
int value = 1;
int result = 0;
if(length>32)
{
AfxMessageBox("超过32字节!");
return 0;
}
else if(length == 0)
{
return 0;
}
else
{
for(int i = length-1;i>=0;i--)
{
if(str.Mid(i,1)=="1")
result+=value;
value*=2;
}
}
return result;}请大家看一下,有没有更简单的写法?谢谢。
bytec

解决方案 »

  1.   

    BTYE byte3 = (byte1 & 7) | (byte2 & 0xf8)
      

  2.   

    大牛,没看懂什么意思。也许我说的不清楚,就是说,如何更简单更好的实现下面这个函数的功能:int TurnBinary(CString str)
    {
        int length = str.GetLength();
        int value = 1;
        int result = 0;
        if(length>32)
        {
            AfxMessageBox("超过32字节!");
            return 0;
        }
        else if(length == 0)
        {
            return 0;
        }
        else
        {
            for(int i = length-1;i>=0;i--)
            {
                if(str.Mid(i,1)=="1")
                    result+=value;
                value*=2;
            }
        }
        return result;
     
    }
      

  3.   

    你不是想把byte1的低3位和byte2的高5位重新组合成一个新的byte吗,就用上面的算法.
      

  4.   

    谢谢啊。byte1的低3位和byte2的高5位重新组合,这只是一种情况,还有其他的,不一定最终是1个byte的,有的会出现9个位。我就是想,在完成组合后,如何将01这样的字符串变成int值。那个函数不错,但是我想可能还有更好的,所以请教一下,请大牛指教
      

  5.   

    关于位运算你google或者baidu下会得到比我写的更准确的信息。