我正在尝试将字节数组转换为像这样的短裤数组:
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'的大小更改为更高的值,但仍然给出错误...代码有什么问题?
答案 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调用