上一篇文章讲到用VBS写二进制文件,为了写二进制文件,首先我们要得到一个文件的二进制值的数组。可以通过程序获取文件的二进制值,本来我是用VBS实现的,但是发现VBS效率实在太低,只好改用C语言。一直知道VBS的效率是很低的,但是不知道和C语言比差多少,于是就有了这篇文章。两个程序都是读取文件的二进制值并转换成十进制后写入一个txt文件,并输出程序运行的时间。
VBS程序代码
Option Explicit
Dim begin_time,end_time,elapse_time
Dim str,length,i,c
Dim ado,fso,file
begin_time = Timer
Set ado = CreateObject("adodb.stream")
Set fso = CreateObject("scripting.filesystemobject")
Set file = fso.OpenTextFile("foo.txt",2,True)
ado.Type = 1
ado.Open
ado.LoadFromFile("foo.jpg")
str = ado.Read
length = LenB(str)
For i = 1 To length
c = AscB(MidB(str,i,1))
file.WriteLine c & "," & "_"
Next
ado.Close
end_time = Timer
elapse_time = end_time - begin_time
WScript.Echo elapse_time
C语言程序代码
#include <stdio.h>
#include <time.h>
int main(void)
{
clock_t end,begin=clock();
int c;
FILE *in,*out;
in = fopen("foo.jpg","rb");
out = fopen("bar.txt","wb");
while((c=fgetc(in))!=EOF)
fprintf(out,"%d\r\n,_",c);
end = clock();
printf("%f\n",(float)(end-begin)/1000);
return 0;
}
同是用一个100kb大小的foo.jpg文件作测试,VBS程序平均运行了7.5秒左右,而C语言程序只运行了0.04秒左右,效率的差别可以看出。如果文件的大小增大,效率的差别更加的明显。