1

次のような 16 ビット値があります。

 0000000000000011

これを次のような 2 つの 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および ボタンという名前の 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

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