vb.net Array.copy不会将目标缓冲区保留为预期大小

时间:2019-05-23 01:05:34

标签: .net vb.net

我分配了源缓冲区和目的缓冲区...

  

将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。

1 个答案:

答案 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看到。