BitConverter.ToInt16给出“目标数组不够长”

时间:2017-02-02 19:31:43

标签: arrays vb.net byte type-conversion

我正在尝试将字节数组转换为像这样的短裤数组:

Public Sub mixFinal()
    Dim patch1Buffer(patch1.Length - 44) As Byte

    System.Array.Copy(patch1, 44, patch1Buffer, 0, patch1.Length - 44)

    Dim patch1ShortBuffer(patch1Buffer.Length) As Short

    For x = 0 To patch1Buffer.Length - 1 Step 1
        patch1ShortBuffer(x) = System.BitConverter.ToInt16(patch1Buffer, x)
    Next
End Sub

'patch1'是一个字节数组,它是通过使用IO.File.ReadAllBytes方法读入.wav文件而创建的。

Visual Studio在编译程序时给出了这个错误:

Destination array is not long enough to copy all the items in the collection. Check array index and length.

我尝试将'patch1Buffer'和'patch1ShortBuffer'的大小更改为更高的值,但仍然给出错误...代码有什么问题?

2 个答案:

答案 0 :(得分:2)

short中的bytes大小等于2 bytes

因此,转换字节数组时会产生两倍的短路。

以下代码会将您的字节数组转换为short:

Imports System.Runtime.InteropServices ' for alternative

Module Module1

    Sub Main()
        Dim bytes(1024-1) As Byte

        Dim shortSize = 2 ' alternative: shortCount = Marshal.SizeOf(GetType(Short))
        Dim shortCount = bytes.Length / shortSize

        Dim shorts(shortCount) as Short
        For i = 0 To shortCount-1
           shorts(i)= BitConverter.ToInt16(bytes, i*shortSize)
        Next

    End Sub

End Module

答案 1 :(得分:0)

好的,因为我将在这里假设您正在尝试将单个字节转换为短路....在这种情况下,bitconvertor.toint16函数将在patch1buffer的末尾运行,因为它一次检索2个字节。

使用

patch1ShortBuffer(x) = cShrt(patch1Buffer(x))

代替。

如果你试图以uShorts的形式获取对,你需要将patch1ShortBuffer的一半大小,使用x * 2迭代到它的长度来进行ToInt16调用