C 将12位数字转换为2个8位字节

C 将12位数字转换为2个8位字节,c,binary,bit-shift,integer-arithmetic,C,Binary,Bit Shift,Integer Arithmetic,在我的一生中,我不知道如何将一个(最大)12位的数字转换成2个8位字节(其中一个值显然不能超过4位) 例如,我可以通过: 7+(60这里主要是16位和12位之间没有区别。 请参见下面的伪代码: calcLSB = value12bit & 0xFF; // get LSB byte calcMSB = value12bit >> 8; // shift bytes over LSB and take them 60值不正确,因为正如您所说,它不能超过4位(该值是这样的

在我的一生中,我不知道如何将一个(最大)12位的数字转换成2个8位字节(其中一个值显然不能超过4位)

例如,我可以通过:

7+(60这里主要是16位和12位之间没有区别。
请参见下面的伪代码:

calcLSB = value12bit & 0xFF; // get LSB byte
calcMSB = value12bit >> 8;    // shift bytes over LSB and take them

60
值不正确,因为正如您所说,它不能超过4位(该值是这样的)。您的上一条语句应该适用于9到16之间的任何位宽度。很抱歉,
7
属于4位类别。这是一个深夜!但是为什么
60&0x0F
,那么?这是从现有源代码中摘录的,我正试图了解自己-它是检索相关字符串的大型查找表的一部分。msb sh应该是8位的值,lsb应该是4位的值。这:
7+(60但这也不对。如果,正如你所说,7应该是4位的类别,那么8位的部分应该向左移动4位以腾出空间,而不是8位。所以pack:
packed=(四位部分+(eightbitpart>4;
。抱歉,这是不正确的。它等同于
calcLSB=255,calcMSB=12
已更新(错误的运算符,是
&
,应该是
&
)。
calcLSB = value12bit & 0xFF; // get LSB byte
calcMSB = value12bit >> 8;    // shift bytes over LSB and take them