长十六进制值拆分为2字节十六进制值或4字节十六进制值,并使用VB.Net将其转换为十进制(浮点)值
我想将长数组拆分为2字节(4位十六进制)或4字节(8位十六进制)。如果c值为1,我想得到2字节(4位十六进制)十六进制数组,如果c值为0,我想从一个长十六进制字符串中得到4字节(8位十六进制)十六进制数组 之后,我想在将2字节或4字节转换为浮点数(十进制数)的同时进行转换 我有4字节到十进制值的代码长十六进制值拆分为2字节十六进制值或4字节十六进制值,并使用VB.Net将其转换为十进制(浮点)值,vb.net,Vb.net,我想将长数组拆分为2字节(4位十六进制)或4字节(8位十六进制)。如果c值为1,我想得到2字节(4位十六进制)十六进制数组,如果c值为0,我想从一个长十六进制字符串中得到4字节(8位十六进制)十六进制数组 之后,我想在将2字节或4字节转换为浮点数(十进制数)的同时进行转换 我有4字节到十进制值的代码 Dim bytes() As Byte = {&H43, &H62, &HD3, &HE} If BitConverter.IsLittleEndian Then
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
请提供此功能的代码
例如:
长十六进制值-4362D30EFFC0000FFC00000FFFFFF
如果C为1,则拆分4位十六进制值
4362
D30E
4362D30E
然后转换成十进制
17250
再次拆分4位十六进制值
4362
D30E
4362D30E
然后转换成十进制
-11506
226.824432
如果c为0,则拆分8位十六进制值
4362
D30E
4362D30E
然后转换成十进制
-11506
226.824432
请帮忙。我不太了解VB.NET .P/> < P>我也会给你一个机会,但是请考虑我在你的新问题上所说的。< /P> 要读取一定数量的字节并将其转换为数字,最好使用及其
To***
方法
这是每个数字数据类型使用的字节数:
:8字节Double
/Int16
/UInt16
/Short
:2字节UShort
/Int32
/UInt32
/Integer
:4字节UInteger
/Int64
/UInt64
/Long
:8字节ULong
: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
Dim StartIndex作为整数=0
Dim EndIndex为整数=字节。长度-1
'要读取的字节数:2或4。
Dim BytesPerStep作为整数=If(C=1,2,4)
'如果系统使用较小的端点,我们需要反转数组并向后循环。
如果BitConverter.IsLittleEndian,则
'反转阵列。
Array.Reverse(字节)
'交换开始和结束索引。
StartIndex=EndIndex
EndIndex=0
'否定BytesPerStep:向后走。
BytesPerStep=-BytesPerStep
如果结束
'一次迭代数组字节。
对于i=StartIndex至EndIndex分步执行步骤
如果C=1,则
'读取两个字节=短(Int16)。
ListBox1.Items.Add(BitConverter.ToInt16(字节,i))
其他的
'读取四个字节=单个(浮点)
ListBox1.Items.Add(位转换器.ToSingle(字节,i))
如果结束
下一个
如果我使用Convert.ToString(&HD30E,16)Convert.ToString(&HD30E,16),那么对于2个字节的使用,这会给出相同的D30E值,而不是-11506;对于4个字节的使用ToSingle()
。如果所有这些值都在一个长字节数组中,只需颠倒整个过程,并在ToSingle()
或ToInt16()
中指定一个开始索引。例如,从反向数组的末尾读取两个字节:BitConverter.ToInt16(bytes,bytes.Length-2)
“这会给出相同的D30E值,而不是-11506”-这是因为您指定它使用基数16(十六进制):Convert.ToString(xxx,16)
。只需使用Convert.ToString(&HD30E)
或&HD30E.ToString()
。在VB.NET中,直接在代码中键入&HD30E
将其编译为-11506
。如果我使用Convert.ToString(&HD30E),它将给出54030。根据,我需要-11506值。该数据类型为int16,根据链接,非常感谢