浮点数组类型的变量引用的值如何具有字节数组类型

本文关键字:数组 类型 何具 字节 字节数 引用 变量 | 更新日期: 2023-09-27 18:00:23

NAudio库提供以下接口。

interface ISampleProvider
{
    WaveFormat WaveFormat { get; }
    int Read(float[] buffer, int offset, int count);
}

我制作了一个实现这个接口的类。在我实现Read的过程中,我得到了非常奇怪的行为。buffer参数的类型显示为byte[],即使该变量被声明为float[]

    int Read(float[] buffer, int offset, int count)
    {
        //The type of buffer is System.Byte[]!
        var type = buffer.GetType();
        ...
    }

这怎么可能?

我不知道NAudio库是如何调用我的Read实现的,但我猜它可能是通过一些不安全的互操作实现的。

浮点数组类型的变量引用的值如何具有字节数组类型

您看到了WaveBuffer类的作用,这是NAudio欺骗.NET的一种方式,让我们在不复制数据或引脚缓冲区的情况下将byte[]"强制转换"到float[]中。

阅读更多信息:

  • WaveBuffer-将字节数组转换为浮点数组
  • 如何在C中将byte[]转换为short[]或float[]数组#