为了我的一生,我无法弄清楚如何将(最大)12位数字转换为2个8位字节(其中一个值显然不能超过4位)。
例如,我可以通过以下方式将7
(4位值)和60
(8位值)整数转换为3079
。7 + (60 << 8) & 0xfff;
但是我无法逆转此过程,从60
提取7
和3079
。
我将以下内容用于16位,但是由于12位值不会产生原始值,因此我无法弄清楚如何对其进行修改:
(calcMSB << 8) | (calcLSB & 0xff)
最佳答案
这里主要是16位和12位之间没有区别。
参见下面的伪代码:
calcLSB = value12bit & 0xFF; // get LSB byte
calcMSB = value12bit >> 8; // shift bytes over LSB and take them