作者ACupCat (一杯猫)
看板Python
标题Re: [问题] 二进位档转ASCII档
时间Wed Jan 30 19:28:19 2013
※ 引述《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
1F:推 yuxio:果然抛砖能引到玉啊, zip 是我不熟悉的函式,等等研究看看 01/30 21:00
2F:→ yuxio:至於拆开再用join组合起来,那是历史修改的痕迹(羞) 01/30 21:00
3F:→ yuxio:因为最初写的版本,有检查如果 x='\x00' 就跳过不转码 01/30 21:02
4F:→ yuxio:结果後来这个if又拿掉了...其实就如所述,直接用encode就好 01/30 21:04
5F:推 yuxio:去看了zip()的文件也看到 zip(*[iter(s)]*n) 这个 idiom, 01/31 03:32
7F:→ ykjiang:这个後来我也想通,乍看下的确不好懂, 01/31 12:31
8F:→ ykjiang:其实就是利用 iter 的 side effect 01/31 12:31