如何使用 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
目前还不清楚为什么需要重新组合低字节和高字节。尽管如此,以下内容应该可以解决您的问题。更改以下代码
来自:
' 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
:
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)。