繁体   English   中英

如何通过 python 使 16 位到 8 位像 0x0300 到 0x03 和 0x00?

[英]how to make 16bit to 8bit like that 0x0300 to 0x03 and 0x00 by python?

如何通过 python 使 16 位到 8 位像 0x0300 到 0x03 和 0x00?

我试着那样做

reg = 0x0300
print(reg[0:4], reg[4::])..

它告诉我'int' object 不可下标

reg = 0x0316
regbinary = bin(reg)
print(regbinary)
regBotoom = regbinary[-8::]
print(regBotoom)
result = hex('0b'+regBotoom)
print(result)


它告诉我

0b1100010110

00010110

TypeError: 'str' object 不能解释为 integer

您可以通过按位与和移位获得越来越低的 8 位:

reg = 0x0316
lowBits = reg & 0xFF
highBits = (reg >> 8) & 0xFF
print(lowBits)
print(highBits)

也许您正在寻找@jafarlihi 给出的答案,其中reg实际上只是一个int并且您改变它的值以获得您所追求的值。

但是,您可能还希望看到:

import struct

reg = 790

regb = struct.pack('h', reg)
print(regb)

msb, lsb = struct.unpack('bb', regb)
print(msb, lsb)

regb_2 = struct.pack('bb', msb, lsb)
print(regb, regb_2)

value = struct.unpack('h', regb)
print(reg, value)

结果:

b'\x16\x03'
22 3
b'\x16\x03' b'\x16\x03'
790 (790,)

位运算符:

x = 0x4321
y = x >> 8 
  = 0x43
z = x & 0x00ff
  = 0x21

如果不先将其转换为字符串,则无法像尝试那样操作 int 。

reg = 0x0300
print(hex((reg >> 8) & 0xFF))
print(hex(reg & 0xFF))

Output:

0x3
0x0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM