上一篇文章讲到用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秒左右,效率的差别可以看出。如果文件的大小增大,效率的差别更加的明显。