亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將十六進制轉儲轉換為 ASCII

將十六進制轉儲轉換為 ASCII

揚帆大魚 2023-02-07 09:37:10
所以我想知道是否有可能使用 Bash 或 Python 將以下十六進制代碼轉換為它的 ascii 輸出,就像它在 xxd 中那樣。因為我已經使用 OCR 從下圖中獲取文本。有沒有一種方法可以使用 bash 或 python 將以下十六進制轉儲轉換為 ascii 字符?(十六進制轉儲,只是沒有 ascii 的十六進制部分)00000690 52 4D 41 50 00 00 01 00 08 00 00 00 08 00 00 00  000006A0 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   000006B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   000006C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   000006D0 00 00 00 00 00 00 00 00 30 E0 01 04 90 9B 00 01   000006E0 B9 4D E9 46 5B 43 00 10 B2 BA FB 46 BA 24 13 16 000006F0 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00   00000700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 有希望的輸出類似于以下內容(除了文本形式而不是圖像),也就是說,hexdump -C 的輸出“:
查看完整描述

2 回答

?
浮云間

TA貢獻1829條經驗 獲得超4個贊

我希望我能很好地理解您的問題:您想從類似于以下輸出的十六進制轉儲中打印 ASCII 字符hexdump:


txt = '''

00000690 52 4D 41 50 00 00 01 00 08 00 00 00 08 00 00 00

000006A0 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

000006B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

000006C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

000006D0 00 00 00 00 00 00 00 00 30 E0 01 04 90 9B 00 01

000006E0 B9 4D E9 46 5B 43 00 10 B2 BA FB 46 BA 24 13 16

000006F0 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00

00000700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 '''


for line in txt.splitlines():

    if not line.strip():

        continue

    address, *nums = line.split()


    # printable ascii characters are from 32 to 127, else print a dot '.':

    print('{} {} {}'.format(address, ' '.join(nums), ''.join(chr(int(n, 16)) if 32 <= int(n, 16) <= 127 else '.' for n in nums)))

印刷:


00000690 52 4D 41 50 00 00 01 00 08 00 00 00 08 00 00 00 RMAP............

000006A0 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

000006B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

000006C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

000006D0 00 00 00 00 00 00 00 00 30 E0 01 04 90 9B 00 01 ........0.......

000006E0 B9 4D E9 46 5B 43 00 10 B2 BA FB 46 BA 24 13 16 .M.F[C.....F.$..

000006F0 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 ................

00000700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................


查看完整回答
反對 回復 2023-02-07
?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

假設兩個連續的十六進制字節之間以及偏移量和第一個十六進制字節之間恰好有一個空格字符,在輸入行中,bash 實現將是:


$  cat hexdump-C 

#!/bin/bash


while read hex; do

# Delete offset

    ascii=" ${hex#* }"

# Replace non-printable bytes with a dot

    ascii=${ascii// [0189ABCDEF]?/.}

# Replace space characters with \x 

    ascii=${ascii// /\\x}

# printf replaces the \xhh sequences with the corresponding characters

    printf "$hex |$ascii|\n"

done

--


$  cat data

00000690 52 4D 41 50 00 00 01 00 08 00 00 00 08 00 00 00  

000006A0 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   

000006B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   

000006C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   

000006D0 00 00 00 00 00 00 00 00 30 E0 01 04 90 9B 00 01   

000006E0 B9 4D E9 46 5B 43 00 10 B2 BA FB 46 BA 24 13 16 

000006F0 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00   

00000700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

--


$  ./hexdump-C < data

00000690 52 4D 41 50 00 00 01 00 08 00 00 00 08 00 00 00 |RMAP............|

000006A0 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|

000006B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|

000006C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|

000006D0 00 00 00 00 00 00 00 00 30 E0 01 04 90 9B 00 01 |........0.......|

000006E0 B9 4D E9 46 5B 43 00 10 B2 BA FB 46 BA 24 13 16 |.M.F[C.....F.$..|

000006F0 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 |................|

00000700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|


查看完整回答
反對 回復 2023-02-07
  • 2 回答
  • 0 關注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號