我有两个字节,例如01010101和11110000.我需要连接第二个字节"1111"和第一个整个字节的四个最高有效位,结果像0000010101011111,即填充四个零,第一个整个字节,最后是第二个字节的四个最高有效位.
任何的想法?
nio*_*nio 12
试试这个:
first = 0b01010101
second = 0b11110000
res = (first<<4) | (second>>4)
print bin(res)
Run Code Online (Sandbox Code Playgroud)
通过将第一个字节向左移位4位,(first<<4)您将添加4个尾随零位.第二部分(second>>4)将移出到第二个字节的右4个LSB位以丢弃它们,因此只剩下4个MSB位,然后你可以按位或者将两个部分结果(|在python中)组合起来.
分裂结果回来了
要回答@JordanMackie的问题,你可以将res后面的数据拆分为两个变量,只需要从原来的4个最低有效位中删除second.
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)) )
Run Code Online (Sandbox Code Playgroud)
输出如下:
res : 0b10101011111
first2 : 0b1010101
second2: 0b11110000
Run Code Online (Sandbox Code Playgroud)
第一个命令提取原始的第一个字节.它将来自second变量的4个LSB位移位到右侧(运算符>>),因此它们将被丢弃.下一个逻辑和操作&仅保留操作的8个最低位,并且丢弃任何额外的高位:
first2 = (res>>4) & 255
Run Code Online (Sandbox Code Playgroud)
其中第二个命令只能恢复second变量的4个MSB位.它res仅从属于second使用逻辑乘法(&)的ult中选择4 LSB .(任何&1 =任何东西,任何东西&0 = 0).丢弃较高位,因为它们与0位进行"与"运算.
接下来,这4位向左移位.零位出现在4个最低有效位位置:
second2 = (res&0b1111)<<4
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9490 次 |
| 最近记录: |