2016-03-19 72 views
2

下面的代碼片段下載使用VBScript的二進制文件:如何從字節數組中讀取生成的二進制文件

... 
Dim fs,ts 
varByteArray = http.ResponseBody 
Set fs = CreateObject("Scripting.FileSystemObject") 
Set ts = fs.CreateTextFile("filetowrite", True) 
For lngCounter = 0 to UBound(varByteArray) 
    ts.Write Chr(255 And Ascb(Midb(varByteArrary, lngCounter + 1, 1))) 
Next 
ts.Close 

(完整的代碼可以發現here

我想知道:

Chr(255 And Ascb(... 
  1. 從我understandig Chr生成2個字節UTF-8,而不是一(https://support.microsoft.com/en-us/kb/145745)。但是,對於新生成的二進制文件的正確字節輸出,這不是必需的嗎?
  2. 爲什麼使用And運算符來屏蔽255,其運算符的數量爲一個字節的ANSI字符。這有什麼目的?
+0

VBScript如何在內部表示字符串,寫入文件是兩個不同的事情。 –

+0

嗯,所以它似乎是因爲Midb-> Ascb,因此不能有任何特殊的unicode表示。因此,Chr之後的字符在內部總是爲0-255 |然後,字符被賦予文本流寫入的一個字節ASCII。因此寫入過程再次正確。 –

+0

對於那些最近沒有在Windows機器上使用ADO庫的人來說,這對我來說似乎毫無意義? – Lankymart

回答

0
  1. 即代碼不使用「選項顯式」,所以變量聲明是無用的。它使用未聲明的變量。不使用兩個聲明和初始化的變量。

  2. 「二進制和」 255似乎沒有任何意義

我下載使用4種不同的方法

的4 MB的測試文件
  • 使用Chrome,常規方法

  • 在腳本中使用ADO方法。速度非常快,與瀏覽器版本的字節相同(十六進制比較)

  • 對「二進制和255」使用AscB方法。它非常非常慢,但與瀏覽器版本(十六進制比較)字節相同。

  • 使用不帶「二進制和255」的AscB方法。這是非常,非常慢(但比5稍快一些),但字節相同的瀏覽器版本(十六進制比較)

  • 底線:該代碼工作。嘗試按優先順序連接多個方法,嘗試按優先順序下載兩種方法(它首先嚐試ADO,如果ADO失敗,則只返回AscB方法)。我喜歡那個代碼。

    +0

    當'Option Explicit'沒有被使用時,我不會看到*「聲明沒用」,理想情況下你應該使用'Option Explicit',但是你應該總是聲明你的變量。你想要的最後一件事是變量超出了函數的範圍等等,再加上它使移動到Option Option Explicit變得容易得多。 – Lankymart

    相關問題