Dot-Net

布爾值是 .NET 中的兩個字節?

  • June 17, 2014

這個問題源於這裡。我在 VS 中嘗試了這個語句,看看會發生什麼:

Len(Name <= 3)

根據這個答案這個答案,布爾值應該消耗 4 個字節。根據 MSDN,VB 中的 Len 函式

返回一個整數,其中包含字元串中的字元數或儲存變數所需的標稱字節數。

Name <= 3應該將 3 轉換為 String 並執行字元串比較,返回一個布爾值,所以Len應該計算其中的字節數,應該是 4。出於某種原因,上面的程式碼返回 2,而不管第二個參數。換句話說,Len(True)也返回 2。嘗試了不同的平台目標(32 和 64)——同樣的事情。

為什麼Len(Boolean)返回 2 而不是 4?

使用使用者定義的類型和對像變數,Len 函式返回將由 FilePut 函式寫入文件的大小。如果一個對象包含一個字元串,它將返回字元串的長度。如果 Object 包含任何其他類型,它將返回對象的大小,因為它將由 FilePut 函式寫入文件。

Len() 是一個遺留函式,它只能在從上一代 Visual Basic 項目移植的程式碼中使用。它通常出現在涉及 VB 值的二進制序列化的程式碼中。在那些舊版本中,基本類型的大小不同。 Integer例如,是 16 位,解釋了您在網路中發現的大量使用 Long 的錯誤 pinvoke 聲明。並且Boolean是一個 VARIANT_BOOL,一個 16 位的值。此外,通過將其True值轉換為 -1 而不是 1,這很古怪。

顯然,採用 .NET 大小對於 VB6 程序編寫的文件中存在的大量數據來說是一個重大的改變。或通過 TCP 連接發送的二進制數據。等等。因此,Len() 函式返回舊尺寸。

引用自:https://stackoverflow.com/questions/14425984