如何通过python将16位到8位转换为0x0300到0x03和0x00?

2024-10-01 13:41:13 发布

您现在位置:Python中文网/ 问答频道 /正文

如何通过python将16位到8位转换为0x0300到0x03和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

TypeError: 'str' object cannot be interpreted as an integer


Tags: 对象binobjectberesultregintprint
3条回答

位运算符:

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

如果不先将int转换为字符串,就无法像您正在尝试的那样操作int

您可以通过按位and和移位获得较低和较高的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,)

相关问题 更多 >