在 Visual Studio 中使用 vb.net 编程 16 位到 8 位

问题描述 投票:0回答:1

如何使用 vb.net Visual Studio 程序将 16 位数据拆分为 8 位

Module Module1
    Sub Main()
        ' Original 16-bit data
        Dim originalValue As UShort = &HA91

        ' Split into two 8-bit values
        Dim highByte As Byte = CByte((originalValue >> 8) And &HFF)
        Dim lowByte As Byte = CByte(originalValue And &HFF)

        ' Display the split values
        Console.WriteLine("High Byte: 0x{0:X2}", highByte)
        Console.WriteLine("Low Byte: 0x{0:X2}", lowByte)

        ' Combine the two 8-bit values back into a 16-bit value
        Dim combinedValue As UShort = CUShort((highByte << 8) Or lowByte)

        ' Display the combined value
        Console.WriteLine("Combined Value: 0x{0:X3}", combinedValue)

        ' Check if the original value matches the combined value
        If originalValue = combinedValue Then
            Console.WriteLine("The values match!")
        Else
            Console.WriteLine("The values do not match!")
        End If

        Console.ReadLine()
    End Sub
End Module

由于某种原因,我无法读取匹配值,我得到 009B 或一些不同的数据,但根据代码,它应该是 2705

string vb.net byte 16-bit 8-bit
1个回答
0
投票

目前还不清楚为什么需要重新组合低字节和高字节。尽管如此,以下内容应该可以解决您的问题。更改以下代码

来自

' Combine the two 8-bit values back into a 16-bit value
Dim combinedValue As UShort = CUShort((highByte << 8) Or lowByte)

' Combine the two 8-bit values back into a 16-bit value
Dim combinedValue As UShort = (CUShort(highByte) << 8) Or lowByte

解释如下。为了理解这个问题,让我们看一下真值表。

合取真值表(AND)

p q p 和 q
1 1 1
1 0 0
0 1 0
0 0 0

析取真值表(OR)

p q p 或 q
1 1 1
1 0 1
0 1 1
0 0 0

注意:我建议使用内置的 Windows 计算器 - 使用菜单选择 Programmer 模式。要输入十六进制值,请在使用键盘之前单击HEX。同样,要输入十进制值,请在使用键盘之前单击DEC。您可能已经知道,要输入二进制值,请在使用键盘之前单击 BIN

我们来看看价值

&HA91

  • 十六进制:A91(也可以写为:0A91)
  • 十二月:2705
  • BIN:1010 1001 0001(也可以写为:0000 1010 1001 0001)

highByte(即:最高有效字节)值为:

0A
(二进制:0000 1010)

lowByte(即:最低有效字节)值为:

91
(二进制:1001 0001)

让我们看一些代码:

Console.WriteLine($"shifted value: {(highByte << 8).ToString("X8")}")

结果

shifted value: 0000000A

如果我们这样做

highByte OR lowByte
会发生什么?

描述
高字节 0000 1010
低字节 1001 0001
高字节或低字节 1001 1011

highByte OR lowByte
=
1001 1011
= 十六进制
9B

发生什么事了?在向左移动位之前,需要有一个

UInt16
(或 UShort)。

© www.soinside.com 2019 - 2024. All rights reserved.