我有一个像这样的16位值:
0000000000000011
我想将它分成两个8位值,如:
00000000 and 00000011
16位值是变量byte_val1
,它是无符号的16位整数。
如何在VB.NET中执行此操作?
答案 0 :(得分:7)
您可以使用BitConverter
类:
Dim bytes As Byte() = BitConverter.GetBytes(byte_val1)
现在bytes(0)
包含低位字节(00000011),bytes(1)
包含高位字节(00000000)。
答案 1 :(得分:5)
要获得较低的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
答案 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