Zgodnie z MSDN Short
typ danych składa się z dwóch bajtów: https://msdn.microsoft.com/en-us/library/47zceaw7.aspxDlaczego mój krótki zawierający 4 bajty w VB.NET
Ale jeśli zdefiniować zmienną Short
, zawartość jest zawsze 4 bajty: & HFFFFFFFF
Dim crc As Short = CShort(&HFFFFS) ' crc = &HFFFFFFFF
Dim crc As Short = &HFFFFS ' crc = &HFFFFFFFF
I to stwierdzenie nawet daje mi błąd:
Dim crc As Short = CShort(&HFFFF) ' Error: Constant expression not representable in type 'Short'
co chodzi z tym? Dlaczego mój Short
nie zajmuje dwóch bajtów?
MWE dodania:
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
Twój komunikat o błędzie nie zaskakuje mnie widząc, że * podpis * Short może pomieścić tylko 32 767, więc '& HFFFF' jest za duży. Czy możesz pokazać fragment kodu wykonywalnego, który pokazuje twój problem? Skąd wiadomo, że zawartość w tym miejscu to 4 bajty? –
@Farhan Dzięki, to był mój błąd w rozumowaniu, moim zamiarem jest ustawienie wszystkich bitów na 1 i nie przekazanie wartości & HFFFF, jak mogę to zrobić? – bitlischieber
@Macro Funkcja "Przesunięcie myszy" i okno obserwacyjne w VS pokazały mi wartość. – bitlischieber