[爆卦]二進位轉換文字是什麼?優點缺點精華區懶人包

為什麼這篇二進位轉換文字鄉民發文收入到精華區:因為在二進位轉換文字這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者ACupCat (一杯貓)看板Python標題Re: [問題] 二進位檔轉ASCII檔時間Wed...


※ 引述《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

你可能也想看看

搜尋相關網站