我有两个字节,例如01010101和11110000.我需要连接第二个字节“1111”和第一个整个字节的四个最高有效位,产生类似于0000010101011111,即填充四个零,第一个整个字节,最后是四个最重要的位第二个字节。
有什么想法吗?
答案 0 :(得分:11)
试试这个:
first = 0b01010101
second = 0b11110000
res = (first<<4) | (second>>4)
print bin(res)
通过将第一个字节向左移位(first<<4)
,您将添加4个尾随零位。第二部分(second>>4)
将移出到第二个字节的右4个LSB位以丢弃它们,因此只剩下4个MSB位,然后你可以按位或者两个部分结果(|
在python中)将它们结合起来。
拆分结果
要回答@JordanMackie的问题,你可以将res
拆分为两个变量,只需从second
中删除原来的4个最低有效位。
first = 0b01010101
second = 0b11110000
res = (first<<4) | (second>>4)
print ("res : %16s" %(bin(res)) )
first2 = (res>>4) & 255
second2 = (res&0b1111)<<4
print ("first2 : %16s" % (bin(first2)) )
print ("second2: %16s" % (bin(second2)) )
输出如下:
res : 0b10101011111
first2 : 0b1010101
second2: 0b11110000
第一个命令提取原始的第一个字节。它将来自second
变量的4个LSB位移到右侧(运算符>>
),因此它们将被丢弃。下一个逻辑和操作&
仅保留操作的8个最低位,并且丢弃任何额外的高位:
first2 = (res>>4) & 255
其中第二个命令只能恢复second
变量的4个MSB位。它使用逻辑乘法(&amp;)从属于res
的{{1}} ult中仅选择4个LSB。 (任何&amp; 1 =任何东西,任何东西&amp; 0 = 0)。高位被丢弃,因为它们与0位进行“与”运算。
接下来,这4位向左移位。零位出现在4个最低有效位位置:
second