我想将长数组拆分为2个字节(4位十六进制)或4个字节(8位十六进制)。如果c值为1,我想获得2个字节(4位十六进制)的十六进制数组,如果c值为0,我想从一个长的十六进制字符串中获取4个字节(8位十六进制)的HEX数组。
之后,我想在将2byte或4byte转换为浮点数(十进制数)时进行转换。
我有4个字节到十进制值的代码。
Dim bytes() As Byte = {&H43, &H62, &HD3, &HE}
If BitConverter.IsLittleEndian Then
Array.Reverse(bytes)
End If
Dim myFloat As Decimal = BitConverter.ToSingle(bytes, 0)
txt4.Text = myFloat
请提供此功能的代码。
示例:
十六进制值长-4362D30EFFC00000FFC00000FFFFFFFF
如果C为1,请分割4位数的十六进制值。
4362
然后转换为十进制。
17250
重新分割4位十六进制值。
D30E
然后转换为十进制
-11506
如果c为0,请分割8位十六进制值。
4362D30E
然后转换为十进制
226.824432
请对此提供帮助。我对VB.Net不太了解
答案 0 :(得分:0)
我也将对此进行介绍,但请考虑一下我在您的新问题上所说的话。
要读取一定数量的字节并将其最好地转换为数字,就是使用BitConverter
及其To***
方法。
这是每种数字数据类型使用多少个字节:
Double
:8个字节Int16
/ UInt16
/ Short
/ UShort
:2个字节Int32
/ UInt32
/ Integer
/ UInteger
:4个字节Int64
/ UInt64
/ Long
/ ULong
:8个字节Single
:4个字节考虑到这一点,您所需要做的只是根据要读取的字节数来确定数据类型,然后在数组中指定要从其开始读取的索引。
请记住,如果反转数组,则必须从数组末尾开始读取。
Dim StartIndex As Integer = 0
Dim EndIndex As Integer = bytes.Length - 1
'How many bytes to read: 2 or 4.
Dim BytesPerStep As Integer = If(C = 1, 2, 4)
'If the system uses little endianness we need to reverse the array and loop backwards.
If BitConverter.IsLittleEndian Then
'Reverse the array.
Array.Reverse(bytes)
'Swap start and end index.
StartIndex = EndIndex
EndIndex = 0
'Negate BytesPerStep: Go backwards.
BytesPerStep = -BytesPerStep
End If
'Iterate the array <BytesPerStep> bytes at a time.
For i = StartIndex To EndIndex Step BytesPerStep
If C = 1 Then
'Read two bytes = Short (Int16).
ListBox1.Items.Add(BitConverter.ToInt16(bytes, i))
Else
'Read four bytes = Single (Float)
ListBox1.Items.Add(BitConverter.ToSingle(bytes, i))
End If
Next