2016-03-24 16 views
5

Laut MSDN ein Short Datentyp besteht aus zwei Bytes: https://msdn.microsoft.com/en-us/library/47zceaw7.aspxWarum kommt die Short mit 4 Bytes in VB.net

Aber wenn ich eine Short Variable zu definieren, der Inhalt ist immer 4 Bytes: & HFFFFFFFF

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

Und diese Aussage gibt mir noch einen Fehler:

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

Was mit diesem ist der Deal? Warum nimmt meine Short nicht zwei Bytes?

MWE hinzugefügt:

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

Ihre Fehlermeldung überrascht mich nicht zu sehen, wie ein * signed * 'Short' kann nur bis zu 32.767 halten - so '& HFFFF' ist zu groß. Können Sie einen ausführbaren Code anzeigen, der Ihr Problem anzeigt? Woher weißt du, dass der Inhalt an diesem Punkt 4 Bytes ist? –

+0

@Farhan Danke, das war mein Denkfehler, meine Absicht ist es, alle Bits auf 1 zu setzen und den Wert von & HFFFF nicht zu überschreiten, wie kann ich das machen? – bitlischieber

+0

@Macro Die "Mouse over Variable" -Funktion und Watch-Fenster in VS zeigte mir den Wert. – bitlischieber

Antwort

5

Es ist, weil ein Short ist unterzeichnet, so das bedeutendste Bit für das Vorzeichen reserviert. Daher ist der höchste Wert können Sie in speichern ein unterzeichnet kurz &H7FFF oder Int16.MaxValue

Wenn Sie alle 16 Bit nutzen wollen, dann müssen Sie eine Unsigned Short (UInt16) verwenden

Also das schlägt fehl:

Dim crc As Short = CShort(&HFFFF) 

Aber das funktioniert:

Dim crc As UShort = CUShort(&HFFFF)