作者ACupCat (一杯猫)
看板Python
标题Re: [问题] 二进位档转ASCII档
时间Wed Jan 30 19:16:41 2013
※ 引述《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