c# byte[] aLaw_pcm = new byte[320 * 1000 + 60]; 请写一个demo,每次按次序从aLaw_pcm取出320个字节的byte[], 当剩余不满320字节后则再从头开始取
时间: 2024-10-09 19:09:45 浏览: 18
在C#中,你可以通过循环来实现这个需求。这里是一个简单的示例,它每次从`aLaw_pcm`数组中提取320个字节,直到数组结束:
```csharp
byte[] aLaw_pcm = new byte[320 * 1000 + 60];
int bytesRead;
int index = 0;
while ((bytesRead = Math.Min(aLaw_pcm.Length - index, 320)) > 0)
{
byte[] chunk = new byte[bytesRead];
Array.Copy(aLaw_pcm, index, chunk, 0, bytesRead);
// 这里可以对chunk进行进一步的操作,比如解码或者存储到另一个地方
Console.WriteLine($"Extracted chunk: {BitConverter.ToString(chunk)}");
// 更新索引以准备下一次提取
index += bytesRead;
}
// 如果有剩余不足320字节的部分,这会被忽略
if (index < aLaw_pcm.Length)
{
Console.WriteLine($"Remaining bytes: {aLaw_pcm.Skip(index).TakeWhile(b => b != 0).Count()}");
}
```
这段代码首先初始化了一个循环变量`bytesRead`,用于记录每次提取的实际字节数。然后在循环内部,我们创建一个新的`byte[]`数组`chunk`,并使用`Array.Copy()`方法复制`aLaw_pcm`中指定数量的字节到`chunk`。如果`aLaw_pcm`中的字节数少于320,我们就直接提取所有剩余的字节。
请注意,此代码假设`aLaw_pcm`数组的最后一个字节表示采样结束(或其他特殊标志)。如果不是这样,你可能需要添加额外的逻辑来处理这种情况。
阅读全文