求教这一段二进制转16进制是怎么转的

DatOut[i] = DatIn[i * 4] + (DatIn[i * 4 + 1] << 1) + (DatIn[i * 4 + 2] << 2) + (DatIn[i * 4 + 3] << 3);
这后面循环左移一位,两位,三位是为什么

2进制转16进制的方法是每四个2进制数字转换成一个16进制数字。

假设四个2进制数字是dcba,则转换成16进制就是:
a*2^0+b*2^1+c*2^2+d*2^3,即a+b<<1+c<<2+d<<3,
因为左移一位相当于乘以2^1,左移两位相当于乘以2^2,左移三位相当于乘以2^3。
那个2的n次方就是每个2进制数字的权值,dcba的权值分别是8、4、2、1。

这样,算出的结果是0~15,再将它转换成16进制字符('0'-'9'或'A'-'F')就可以了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-11-11

就是乘以2,乘以4,乘以8,二进制数中的每位数字乘以所在位的权重再累加,才能得到正确的十六进制值。

相当于:

DatOut[i] = DatIn[i * 4] + DatIn[i * 4 + 1]*2 + DatIn[i * 4 + 2]*4 + DatIn[i * 4 + 3]*8;


相似回答