iT邦幫忙

0

python 十六進位轉二進位並8*8顯屏的困境

菜鳥初學python中,遇到一項任務掙扎數天有點頭緒、有點方向、知道問題但沒有方法,還請版上大大指點迷津,先感激各位:
目的: 例如一檔案txt內容如下,解成二進位後顯示於黑白屏幕
str='0x8080808000800000,!'
讓它去掉前兩碼 [2:] 之後兩兩一組 並轉成二進位,如下圖範例
https://ithelp.ithome.com.tw/upload/images/20201128/201222993ZwSbCmVtX.jpg
,即可在key: !時只讀取1 如圖,讓螢幕顯示 !
https://ithelp.ithome.com.tw/upload/images/20201128/20122299I3yTo1UPkk.jpg

目前想法:
https://ithelp.ithome.com.tw/upload/images/20201128/20122299at93ayKMPg.jpg
卡關於

  1. list(test)之後如何兩兩一組?用append?
    2.如何讓不足四碼的item補足零?

2 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2020-11-28 22:44:18

以下是 python 16進位 轉 2進位 的範例供參考

# 0x1a --> 0b00011010
my_hexdata = "1a"
scale = 16 ## equals to hexadecimal
num_of_bits = 8
bin(int(my_hexdata, scale))[2:].zfill(num_of_bits)

參考資料來源

我看不懂你的題目
12, IA, 6S, 78 就算了
四個轉出來都是相同 1000 0000
/images/emoticon/emoticon06.gif

froce iT邦大師 1 級 ‧ 2020-11-29 23:56:13 檢舉

看不懂題目+1

toro523 iT邦新手 5 級 ‧ 2020-11-30 15:28:33 檢舉

感謝回復,不好意思,本想問個大概求個方向自己再多琢磨,所以附上的圖數字是個大概,但發現我還是不會運用且我想錯了,還請您幫我看看...實際情況是:
一txt 檔內容為
https://ithelp.ithome.com.tw/upload/images/20201130/20122299BhJI5GNiV8.jpg
此為連結
https://docs.google.com/document/d/17-hB8tSBx4L7-e_8sZod0j2Y0hIaWdx9D_g9h1hgH0k/edit?usp=sharing
左邊為十六進位碼,當轉為二進位並8*8排序`讀取1後即可出現 右邊的 key 值 (如一開始問題附上的圖 顯出驚嘆號)

感謝海綿寶寶大神的回應,讓我看到如何轉換的重點,原本我是想如下圖
開檔案讀取建起list 但發現它會無限讀取!
https://ithelp.ithome.com.tw/upload/images/20201130/201222992CvUQSB3nq.jpg
之後我又卡了該如何建起lsit後讀左邊碼又解成二進位然後讓右邊當key,不確是否建成 dictionary?!
然後又卡在
list('x40407C42625C0000') 得個別分開成 ['x','4','0','4'....],那該如何才能兩兩一組如 ['x4','04','07'...]轉二進位,又或是個別轉二進位後兩兩成一組

0
一級屠豬士
iT邦大師 1 級 ‧ 2020-11-28 23:28:13
n=101
#For spacing between the each column, based on the integer limit given.
spacing = len(bin(n)[2:])

print ("Decimal".rjust(spacing, ' ')+"Octal".rjust(spacing+1, ' ')+"HexaDeci".rjust(spacing+2, ' ')+"Binary".rjust(spacing, ' '))

for i in range(1,n+1):
    print (str(i).rjust(spacing, ' '),str(oct(i)[1:]).replace('o','').rjust(spacing, ' '),str(hex(i)[2:].upper()).rjust(spacing, ' '),str(bin(i)[2:]).rjust(spacing, '0') )
Decimal   Octal HexaDeci Binary
      1       1       1 0000001
      2       2       2 0000010
      3       3       3 0000011
      4       4       4 0000100
      5       5       5 0000101
      6       6       6 0000110
      7       7       7 0000111
      8      10       8 0001000
      9      11       9 0001001
     10      12       A 0001010
     11      13       B 0001011
     12      14       C 0001100
     13      15       D 0001101
     14      16       E 0001110
     15      17       F 0001111
     16      20      10 0010000
     ......
     99     143      63 1100011
    100     144      64 1100100
    101     145      65 1100101

我要發表回答

立即登入回答