次のような 16 ビット値があります。
0000000000000011
これを次のような 2 つの 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
および ボタンという名前の 3 つのテキスト ボックス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
必要なビットを含むソースを (「バイナリ 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