Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
长十六进制值拆分为2字节十六进制值或4字节十六进制值,并使用VB.Net将其转换为十进制(浮点)值_Vb.net - Fatal编程技术网

长十六进制值拆分为2字节十六进制值或4字节十六进制值,并使用VB.Net将其转换为十进制(浮点)值

长十六进制值拆分为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

我想将长数组拆分为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
    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***
方法

这是每个数字数据类型使用的字节数:

  • Double
    :8字节
  • Int16
    /
    UInt16
    /
    Short
    /
    UShort
    :2字节
  • Int32
    /
    UInt32
    /
    Integer
    /
    UInteger
    :4字节
  • Int64
    /
    UInt64
    /
    Long
    /
    ULong
    :8字节
  • 单个
    :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,根据链接,非常感谢