1

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

 0000000000000011

我想将其拆分为两个 8 位值,例如:

 00000000    and    00000011

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

如何在 VB.NET 中做到这一点?

4

3 回答 3

8

您可以使用BitConverter该类:

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

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

于 2013-02-27T11:18:03.397 回答
5

要获得低 8 位,您需要将其与11111111,或0xff
要获得高 8 位,您需要将其与1111111100000000,或0xff00
然后进行算术左移 8 位。

好久没做Visual Basic了,不过思路是这样的:

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

哦,这是我用三个名为 , 和一个按钮的文本框a编写aloweraupper代码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

于 2013-02-27T11:13:51.017 回答
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
于 2013-02-27T11:31:16.317 回答