如何在VB.NET中将16位值拆分为两个8位值?

时间:2013-02-27 11:10:29

标签: vb.net 16-bit 8-bit

我有一个像这样的16位值:

 0000000000000011

我想将它分成两个8位值,如:

 00000000    and    00000011

16位值是变量byte_val1,它是无符号的16位整数。

如何在VB.NET中执行此操作?

3 个答案:

答案 0 :(得分:7)

您可以使用BitConverter类:

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

现在bytes(0)包含低位字节(00000011),bytes(1)包含高位字节(00000000)。

答案 1 :(得分:5)

要获得较低的8位,您需要使用111111110xff 要获得高8位,您需要使用11111111000000000xff00 然后算术左移恰好是8位。

我有一段时间没有做过Visual Basic,但想法如下:

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

哦,这是我用三个名为aaloweraupper和一个按钮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

旁注:(localA And &HFF00) >> 8(localA >> 8) And &HFF

等同

答案 2 :(得分:2)

如果你想要任何值的某些字节(32位,64位,128位等),一个简单的位移应该可以工作。

最简单的方法是将AND(“二进制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