我有一个像这样的 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)。
要获得低 8 位,您需要将其与11111111
,或0xff
要获得高 8 位,您需要将其与1111111100000000
,或0xff00
然后进行算术左移 8 位。
好久没做Visual Basic了,不过思路是这样的:
word a = 1930392;
byte alower = a & 0xff;
byte ahigher = (a & 0xff00) >> 8;
哦,这是我用三个名为 , 和一个按钮的文本框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
旁注:(localA And &HFF00) >> 8
相当于(localA >> 8) And &HFF
如果您想要任何值(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