Re: [問題] 二進位檔轉ASCII檔

看板Python作者 (一杯貓)時間12年前 (2013/01/30 19:28), 編輯推噓2(206)
留言8則, 2人參與, 最新討論串6/7 (看更多)
※ 引述《yuxio (征服世界中)》之銘言: : ※ 引述《bob123 ()》之銘言: : : with open('100M.bin','rb') as fin, open('100M.hex','w') as fout: : : fout.write(fin.read().encode('hex').capitalize()) : : 第三行 : 小弟也來野人獻曝一下, : 分享自己個人工具庫裡與原PO問題相關的小片段 : 因為是個人使用的,所以只是針對字串,不是針對檔案 : 有需要者請自行修改即可 : # binary to hex string. ex, '\x12\x34\xcd\xef' -> '1234CDEF' : bin2hex = lambda b: ''.join(x.encode('hex') for x in b).upper() 這個不是很懂為何要拆開再用join組合起來? lambda b: b.encode('hex') 就行了. str的encode method 夠好用了, 通常不太需要在做一隻function來把 "...".encode() 的形式改成 hex_encode( "..." ) : # split string/sequences in same size. : # ex, strsplit('AABBCCDD',2) -> ['AA','BB','CC','DD'] : strsplit = lambda seq, size: [seq[i:i+size] for i in range(0, len(seq), size)] lambda seq, size: map ( ''.join, zip( *([iter(seq)]*size) ) ) : 另外,如果是使用 Mac 或 Unix, : 可以在 console 用以下的指令作轉換: : xxd -u -ps 100M.bin > 100M.hex : 這應該會比自己寫 python 或寫 c 還快 :) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.211.32.194

01/30 21:00, , 1F
果然拋磚能引到玉啊, zip 是我不熟悉的函式,等等研究看看
01/30 21:00, 1F

01/30 21:00, , 2F
至於拆開再用join組合起來,那是歷史修改的痕跡(羞)
01/30 21:00, 2F

01/30 21:02, , 3F
因為最初寫的版本,有檢查如果 x='\x00' 就跳過不轉碼
01/30 21:02, 3F

01/30 21:04, , 4F
結果後來這個if又拿掉了...其實就如所述,直接用encode就好
01/30 21:04, 4F

01/31 03:32, , 5F
去看了zip()的文件也看到 zip(*[iter(s)]*n) 這個 idiom,
01/31 03:32, 5F

01/31 03:33, , 6F
可是官方文件卻沒解釋,後來找到這篇 http://goo.gl/kik5I
01/31 03:33, 6F

01/31 12:31, , 7F
這個後來我也想通,乍看下的確不好懂,
01/31 12:31, 7F

01/31 12:31, , 8F
其實就是利用 iter 的 side effect
01/31 12:31, 8F
文章代碼(AID): #1H2GFL_v (Python)
文章代碼(AID): #1H2GFL_v (Python)