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

看板Python作者 (一杯貓)時間12年前 (2013/01/30 19:16), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串5/7 (看更多)
※ 引述《tgrk (tgrk)》之銘言: : 標題: [問題] 二進位檔轉ASCII檔 : 時間: Tue Jan 29 23:22:32 2013 : : : 實作把二進位檔變成ASCII文字檔的程式,類似BASE64轉換。 : 構想是每次讀取二進位檔1byte, : 然後轉成相對應的十六進位數字,存入文字檔中。 : 如下,檔案會變成兩倍大。 : : 二進位檔 文字檔 : 1111 1110 1111 1110 --> FE FE : : : 現在問題是這個程式很慢,1MB檔案就要跑約十分鐘。 : 我知道1byte就來一個迴圈,數目太多了。 : 但這是程式寫法不好的問題? : 還是PYTHON 只能那麼慢? 把你的code一模一樣的寫法 要是用C++寫 會變成這種樣子... FILE * fd = fopen ( argv[1], "rb" ); while ( 1 ) { char * values = new char[1]; size_t p = fread ( values, 1, 1, fd ); if ( 0 == p ) { break; } int int_value = values[0]; char buffer[5]; char hex_value[5]; sprintf ( buffer, "%x", int_value ); if ( strlen ( buffer ) == 1 ) { sprintf ( hex_value, "0%s", buffer ); } else { sprintf ( hex_value, "%s", buffer ); } FILE * fout = fopen ( argv[2], "ab" ); fprintf ( fout, "%s", hex_value ); fclose ( fout ); delete [] values; } fclose ( fd ); 也是很慢啊 Orz 1MB 的input, 程式跑了十幾秒, 之後電腦還lag了一分鐘 用bob123的寫法, python在我的電腦上只要0.02秒, 莫非python 比C快? : : while 1: : : values = array.array('B') # array of integer : p=values.read(orinobj, 1) # orinobj is a binary file : : if p: : break : : else: : int_value = values[0] : if len(hex(int_value)) ==3: : hex_value ='0'+hex(int_value)[2:3] : : else: : hex_value =hex(int_value)[2:4] : : txtgobj=open(txt, 'a') : txtgobj.write(hex_value) : txtgobj.close() : : orinobj.close() : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 42.70.205.62 : ※ 編輯: tgrk 來自: 42.70.205.62 (01/29 23:24) : → NewSpec:那句"PYTHON 只能那麼慢"實在是讓人不順眼阿... 01/30 02:02 : → marksmanz:不要一直開檔... hex_value = "%02x"%values[0]改一下 01/30 02:09 : → swpoker:其實他是想上來證明是PYTHON慢~而非自己寫不好 01/30 08:57 : → jaw109:一次只讀一個byte, 就算你用C來寫跑起來也是很慢 01/30 18:38 關鍵在 open 和 close的次數, 他迴圈每次都做, 做1M 次... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.211.32.194
文章代碼(AID): #1H2G4SB- (Python)
文章代碼(AID): #1H2G4SB- (Python)