【问题标题】:How do I split a 16-bit value into two 8-bit values in VB.NET?如何在 VB.NET 中将 16 位值拆分为两个 8 位值?
【发布时间】:2013-02-13 04:06:36
【问题描述】:

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

 0000000000000011

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

 00000000    and    00000011

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

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

【问题讨论】:

标签: vb.net 16-bit 8-bit


【解决方案1】:

您可以使用BitConverter 类:

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

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

【讨论】:

    【解决方案2】:

    要获取低 8 位,您需要与 111111110xff 一起使用
    要获取高 8 位,需要与 11111111000000000xff00
    然后算术左移 8 位。

    我有一段时间没做Visual Basic了,但是思路是这样的:

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

    哦,这是我用三个名为 aaloweraupper 的文本框和一个按钮 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

    【讨论】:

    • 从技术上讲,在进行位移之前不需要进行 AND 操作。
    • (localA 和 &HFF00) >> 8;必然是这样的。否则我需要写 ((localA >> 8) 和 &HFF),如果你喜欢,你可以自己画一幅画,这并不难。 0xff00 和 0x00ff 不相等
    • VB.NET 中的位移不是循环的,因此当您将 16 位数字向右移动 8 位时,最右边的 8 位将被丢弃。因此,没有必要先将它们归零。这样做的唯一原因是如果您有更大的数字,例如 32 位整数。
    【解决方案3】:

    如果您想要任何值(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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-05
      • 2011-06-01
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      相关资源
      最近更新 更多