如何使 16 位到 8 位像这样 0x0300 0x03 和 Python 0x00?
我试着那样做
reg = 0x0300
print(reg[0:4], reg[4::])..
它向我显示"int"对象不可下标
reg = 0x0316
regbinary = bin(reg)
print(regbinary)
regBotoom = regbinary[-8::]
print(regBotoom)
result = hex('0b'+regBotoom)
print(result)
它告诉我
0b1100010110
00010110
类型错误:"str"对象不能解释为整数
你可以通过按位 AND 和移位得到越来越高的 8 位:
reg = 0x0316
lowBits = reg & 0xFF
highBits = (reg >> 8) & 0xFF
print(lowBits)
print(highBits)
按位运算符:
x = 0x4321
y = x >> 8
= 0x43
z = x & 0x00ff
= 0x21
如果不先将其转换为字符串,就无法像尝试的那样操作 int。
也许你是在追求@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'x16x03'
22 3
b'x16x03' b'x16x03'
790 (790,)
reg = 0x0300
print(hex((reg >> 8) & 0xFF))
print(hex(reg & 0xFF))
输出:
0x3
0x0