Как разделить 16-битное значение на два 8-битных значения в VB.NET?

Вопрос: У меня есть 16-битное значение, подобное этому: 0000000000000011 Я хочу разбить это на два 8-битных значения, например: 00000000 and 00000011 16-битовое значение представляет собой переменную byte_val1, которая представляет собой целое число без знака 16 бит. Как это сделать в VB.NET? Лучший ответ: Вы можете использовать класс BitConverter: Dim bytes As Byte() = BitConverter.GetBytes(byte_val1) Теперь

Вопрос:

У меня есть 16-битное значение, подобное этому:

0000000000000011

Я хочу разбить это на два 8-битных значения, например:

00000000 and 00000011

16-битовое значение представляет собой переменную byte_val1, которая представляет собой целое число без знака 16 бит.

Как это сделать в VB.NET?

Лучший ответ:

Вы можете использовать класс BitConverter:

Dim bytes As Byte() = BitConverter.GetBytes(byte_val1)

Теперь bytes(0) содержат младший байт (00000011), а bytes(1) содержат старший байт (00000000).

Ответ №1

Чтобы получить более низкие 8 бит, вам нужно и это с 11111111, или 0xff
Чтобы получить верхние 8 бит, вам нужно и это с 1111111100000000, или 0xff00
Затем к арифметическому сдвигу влево ровно 8 бит.

Я не делал Visual Basic в то время, но идея такова:

word a = 1930392; byte alower = a & 0xff; byte ahigher = (a & 0xff00) >> 8;

О, вот код, который я сделал с тремя текстовыми alower, называемыми a, alower, aupper и кнопкой btnDoIt:

Private Sub btnDoIt_Click(sender As Object, e As EventArgs) Handles btnDoIt.Click Dim localA = Integer.Parse(a.Text()) Dim localALower = localA And &HFF Dim localAUpper = (localA And &HFF00) >> 8 alower.Text = localALower aupper.Text = localAUpper End Sub

Sidenote: (localA And &HFF00) >> 8 равновероятно (localA >> 8) And &HFF

Ответ №2

Простой битвейт должен работать, если вы хотите, чтобы определенный байт из любого значения (32 бит, 64 бит, 128 бит и т.д.).

Самый простой способ – AND (“двоичный И”, также записанный как “&”) источник с нужными битами, а затем сдвигать его столько раз, сколько необходимо для получения желаемого значения.

Dim initial as Integer = &H123456 ‘ Hex: 0x123456 Dim result as Byte = (initial AND &H00FF00) >> 8 ‘result = 0x34

и если вы хотите присоединиться к ним снова, это еще проще:

Dim initial as Integer = &H123456 ‘ Hex: 0x123456 Dim result_a as Byte = (initial AND &H00FF00) >> 8 Dim result_b as Byte = (initial AND &HFF0000) >> 16 Dim final as Integer = (result_a << 8) or (result_b << 16) ‘final = 0x123400

Оцените статью
Добавить комментарий