Member 14100511 Ответов: 1

Как преобразовать 4 байта в signed int в VB?


Правильно ли я думаю, что в прямом порядке байтов 4 байта инт подпись, знак удерживается в топ-битный 4-й байт? т. е.(в двоичном) хххххххх хххххххх хххххххх хххххххх хххххххх хххххххх 0xxxxxxx 1xxxxxxx отрицательный и положительный?

Что я уже пробовал:

Поскольку я только "подозреваю", что данные, на которые я смотрю, подписаны, а не "знаю", я не уверен, как доказать вещи в любом случае.

1 Ответов

Рейтинг:
0

raddevus

О, если вы хотите определить, как работает endian-ness в VB, вы можете попробовать что-то вроде:
(Используйте свои ценности и попробуйте.)

Dim a() As Byte = { &H1C }
Dim b(3) As Byte
If BitConverter.IsLittleEndian Then
    b(0) = a(0)
Else
    b(3) = a(0)
End If
Dim key As Integer = BitConverter.ToInt32(b, 0)

Найдено по адресу: Измените массив байтов на целое число в VB.net - переполнение стека[^]


Как насчет этого?
Private Function BArrayToInt(ByRef bArray() As Byte) As Integer
    Dim iReturn As Integer
    Dim i As Integer
    For i = 0 To UBound(bArray) - LBound(bArray)
        iReturn = iReturn + bArray(i) * 2 ^ i
    Next i

    BArrayToInt = iReturn

End Function


от : bytearray - байтовый массив для целого числа со знаком в VB6 - Stack Overflow[^]


Member 14100511

Спасибо, раддевус. Мне следовало бы сказать, что я работаю в VB6, как и подобает моему возрасту.
Я не вижу, как решение VB6 собирается возвращать подписанное значение, но попробую это сделать.

В основном мой вопрос заключается в том, где знаковый бит хранится в маленьком 4-байтовом номере endian.