我分配了源缓冲区和目的缓冲区...
将packet_receive_buffer(4104)视作字节
暗的payload_buffer(4104) 字节
我用4100个字节填充packet_receive_buffer ...
USB_Interface.receive_async(packet_receive_buffer,
bytes_to_read,
total_transferred_bytes)
(bytes_to_read和total_transferred_bytes均为= 4100)
我从packet_receive_buffer复制4096字节到有效负载缓冲区,跳过packet_receive_buffer的前4个字节……..
Array.Copy(packet_receive_buffer,4,payload_buffer,0, bytes_to_read-4)
错误…payload_buffer数组的大小是4105,而不是4096。
答案 0 :(得分:1)
复制数组不会更改其大小。 Array.Copy
的作用是用新数组中的值替换指定起始索引到指定终止索引中的值。
在您的代码中,您做了以下声明
Dim packet_receive_buffer(4104) as Byte
Dim payload_buffer(4104) as Byte
这将packet_receive_buffer
数组初始化为4105字节。要实际获得4096个字节,您应该像这样声明它
Dim packet_receive_buffer(4095) as Byte
请注意,声明为byte(x)
的字节数组会分配x + 1
个存储空间。可以使用GC.GetTotalMemory
看到。