2016-03-24 54 views
5

根據MSDN一個Short數據類型由兩個字節:https://msdn.microsoft.com/en-us/library/47zceaw7.aspx爲什麼含4個字節我的短在VB.net

但是如果我定義一個變量Short,內容始終是4個字節:& HFFFFFFFF

Dim crc As Short = CShort(&HFFFFS) ' crc = &HFFFFFFFF 
Dim crc As Short = &HFFFFS   ' crc = &HFFFFFFFF 

而且這種說法甚至給我一個錯誤:

Dim crc As Short = CShort(&HFFFF) ' Error: Constant expression not representable in type 'Short' 

有什麼處理?爲什麼我的Short不佔用兩個字節?

MWE補充說:

Public Function CRC16(ByVal dataFrame As Byte(), ByVal dataLength As Int16) As Int16 

    Dim index As Int16 
    Dim crc As Short = &HFFFFS 

    For iCount As Int16 = 0 To CShort(dataLength - 1) 
     index = (crc >> 8) Xor dataFrame(iCount) 
     crc = CShort(&HFFFF And ((crc << 8) Xor CRC_Table(index))) 
    Next 

    Return crc 

End Function 
+1

您的錯誤陳述並不讓我感到驚訝,因爲* *簽名*'Short'最多隻能容納32,767個 - 所以'&HFFFF'太大了。你能顯示一段可執行代碼來顯示你的問題嗎?你怎麼知道現在的內容是4個字節? –

+0

@ Farhan謝謝,那是我在推理中的錯誤,我的意圖是將所有位設置爲1,並且不傳遞&HFFFF的值,我該怎麼做? – bitlischieber

+0

@Macro VS中的「鼠標懸停變量」函數和Watch窗口向我顯示了值。 – bitlischieber

回答

5

這是因爲Short簽署,所以最顯著位保留爲標誌。因此最高值,你可以在簽署短期存儲是&H7FFFInt16.MaxValue

如果你想使用全部16位,那麼你需要使用一個無符號短(UInt16

所以這個失敗:

Dim crc As Short = CShort(&HFFFF) 

但這個工程:

Dim crc As UShort = CUShort(&HFFFF) 
相關問題