已知序号 要转换得到的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
2 0x0002
3 0x0004
4 0x0008
5 0x0010
6 0x0020
7 0x0040
8 0x0080
9 0x0101
10 0x0102
11 0x0104
12 0x0108
n 0x****通过数学和位运算将前者转换成后者
( 0x0100<<( (已知序号)/8%8-1 ) )
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** 通过数学和位运算将前者转换成后者,应该是转成这样的,刚提问是弄错的
6 0x00 0x20
7 0x00 0x40
8 0x00 0x80
9 0x01 0x01
10 0x01 0x02
11 0x01 0x04
12 0x01 0x08
拿到一个数减1
除以8取整
将结果保存在第一列byte
将这个数对8取余
将余数除以4取整
如果此时是0则将余数对4取余后的的结果求2的幂存于第二列byte的低四位
如果此时是1则将余数对4取余后的的结果求2的幂存于第二列byte的高四位
// 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);
}