如何使 16 位到 8 位像这样0x0300 0x03 和 Python 0x00?



如何使 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

最新更新