已知序号      要转换得到的DA值
1             0x0001
2             0x0002
3             0x0004
4             0x0008
5             0x0010
6             0x0020
7             0x0040
8             0x0080
9             0x0101
10            0x0102
11            0x0104
12            0x0108
n             0x****通过数学和位运算将前者转换成后者

解决方案 »

  1.   

    ( 0x0001<<( (已知序号)%8-1 ) )  +
    ( 0x0100<<( (已知序号)/8%8-1 ) )
      

  2.   

    已知序号      要转换得到的DA值 
    1            0x00 0x01 
    2            0x00 0x02 
    3            0x00 0x04 
    4            0x00 0x08 
    5            0x00 0x10 
    6            0x00 0x20 
    7            0x00 0x40 
    8            0x00 0x80 
    9            0x01 0x01 
    10           0x01 0x02 
    11           0x01 0x04 
    12           0x01 0x08 
    n            0x** 0x** 通过数学和位运算将前者转换成后者,应该是转成这样的,刚提问是弄错的
      

  3.   

    不是顺序乘2哦
    6            0x00 0x20 
    7            0x00 0x40 
    8            0x00 0x80 
    9            0x01 0x01 
    10          0x01 0x02 
    11          0x01 0x04 
    12          0x01 0x08 
      

  4.   

    我口述一下
    拿到一个数减1
    除以8取整
    将结果保存在第一列byte
    将这个数对8取余
    将余数除以4取整
    如果此时是0则将余数对4取余后的的结果求2的幂存于第二列byte的低四位
    如果此时是1则将余数对4取余后的的结果求2的幂存于第二列byte的高四位
      

  5.   

    经测试,达到你的要求:
    //  int nValue = 0; // 全部值
        int nLeft  = 0; // 左边值
        int nRight = 0; // 右边值
        
        CString str = _T("");
        int i = 0;
        
        for(i=0; i<20; i++)
        {
        //  nValue = int( pow(2, i) );
            nLeft  = i / 8;
            nRight = int( pow(2, i % 8) );
            
        //  str.Format(_T("%d, 0x%X, 0x%X, 0x%X"), i+1, nValue, nLeft, nRight);
            str.Format(_T("%d, 0x%X, 0x%X"), i+1, nLeft, nRight);
            MessageBox(str);
    }