Vb.net 显示字节数组中每个项的ASCII表号

Vb.net 显示字节数组中每个项的ASCII表号,vb.net,Vb.net,我正在编写一个消息生成器,在其中我必须向请求数据的远程机器发送一个字节数组 我有一个8位的数字,用来计算有多少项被请求(count),我正试图将这个数字插入到一个字节数组中。 字节数组位置位于数组的位置70和71,并以小尾端顺序排列 我正在尝试转换字节,然后用下面的代码插入转换后的字节 Dim count As Byte = 3 Dim countbyteArray As Byte() = BitConverter.GetBytes(count) sendBytes(70

我正在编写一个消息生成器,在其中我必须向请求数据的远程机器发送一个字节数组

我有一个8位的数字,用来计算有多少项被请求(count),我正试图将这个数字插入到一个字节数组中。 字节数组位置位于数组的位置70和71,并以小尾端顺序排列

我正在尝试转换字节,然后用下面的代码插入转换后的字节

    Dim count As Byte = 3
    Dim countbyteArray As Byte() = BitConverter.GetBytes(count)
    sendBytes(70) = (countbyteArray(0))
    sendBytes(71) = (countbyteArray(1))
当我对大于1的任何内容执行此操作时,它不会被我发送字节数组到的设备接受


我是在正确的球场上,还是完全错了,因为我没有完全跟上字节和位的速度。此外,任何示例或解释都将不胜感激。

小端点是.NET中的自然顺序,因此易于使用

对于一个消息生成器来说,这不是更容易说吗

Dim message = New Message With { .Command = Command.Request, .Device = &hF, .Count = 8, .Filter = &h1234 }
Dim bytes = message.GetBytes()
' Hex for debugging
Dim hex = BitConverter.ToString(bytes)  
您只需布局消息的结构。一种方法是使用
LayoutKind.Explicit
。我可能会选择最符合设备文档的布局类型

Public Enum Command As Byte
    Reset = 0
    Request = 1
End Enum

<StructLayout(LayoutKind.Explicit)>
Public Structure Message
    <FieldOffset(0)> Public Command As Command
    <FieldOffset(1)> Public Device As Byte
    ' unused bytes default to 0
    <FieldOffset(10)> Public Count As UInt16
    <FieldOffset(12)> Public Filter As Int16

    Public Function GetBytes() As Byte()
        Dim rawData(0 To Marshal.SizeOf(Me) - 1) As Byte
        Dim handle = GCHandle.Alloc(rawData, GCHandleType.Pinned)
        Try
            Dim rawDataPtr = handle.AddrOfPinnedObject()
            Marshal.StructureToPtr(Me, rawDataPtr, False)

            Return rawData
        Finally
            handle.Free()
        End Try
    End Function

End Structure

'TODO define enums, etc to make it easier for caller. 
'TODO update struct per device documentation
Public Enum命令作为字节
重置=0
请求=1
结束枚举
公共结构信息
作为命令的公共命令
作为字节的公共设备
'未使用的字节默认为0
公共计数为UInt16
公共过滤器As Int16
公共函数GetBytes()作为字节()
Dim rawData(0到封送.SizeOf(Me)-1)作为字节
Dim handle=GCHandle.Alloc(rawData,GCHandleType.pinted)
尝试
Dim rawDataPtr=handle.addrofPindedObject()
Marshal.StructureToPtr(Me、rawDataPtr、False)
返回原始数据
最后
handle.Free()
结束尝试
端函数
端部结构
'TODO定义枚举等,以使调用方更轻松。
'TODO每个设备更新结构文档

通过将
字节
转换为
字节
数组,我真的不明白您想要实现什么。你能解释一下吗?您发送的
字节
数组中的这两个位置究竟代表什么?实际上,
BitConverter.GetBytes
没有重载,它有一个类型为
Byte
的参数,因此实际发生的是,您的
计数
被隐式转换为一个
整数
,然后您得到一个四字节的表示,这个问题的关键正是你的接收者所期望的,而你没有向我们解释,而且你自己似乎也不理解,所以你需要做的是研究这个问题。我们没办法。