簡體   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