我最近正在將一些VB6代碼升級到VB.NET。出現的一個奇怪問題是short
數據類型的差異。在VB6和VB.NET中對短值進行不同的處理?
原始VB6碼具有下面的行:
foobar(&H8589)
其中foobar
是接受一個short
參數的函數。上面的代碼在VB6中工作正常。目的是將兩個字節傳遞給該函數,short
似乎是一種適合的數據類型,因爲它代表2個字節。
一旦升級,代碼突然返回錯誤Constant value not representable in type 'Short'.
所以我在MSDN, where it says閱讀有關此數據類型:
簽署的保全16位(2字節),從-32,768到32,767範圍內的值的整數。
所以我們將0x8589
轉換爲DEC。變爲-31,351
,這在該類型設定的邊界內。現在,奇怪的是:當我使用DEC值(foobar(-31351)
)調用函數時 - 它的工作原理!
所以你可能會問爲什麼我不會只使用DEC值。那麼,使用HEX的好處是每個查看代碼的人都能立即知道傳遞了哪些字節,在這種情況下哪些字節很重要。
所以:爲什麼我不能使用HEX表示法?這種差異記錄在某處嗎?有沒有一種方法可以在不改變函數的情況下使用HEX代碼(例如接受兩個Byte
參數)?
H8589將整數轉換爲34185值。這超出了短數據類型的邊界,這就是爲什麼你會遇到錯誤。 – Harsh
這聽起來像你想要一個未簽名的短。 – SLaks
@Harsh但用2個字節的寬度轉換,結果爲'-31351'。這似乎是VB6在內部所做的。我想知道它爲什麼會發生變化 - 升級引擎甚至沒有留下評論,但它確實是不兼容的。 –