gpt4 book ai didi

c# - 将原始字节数据转换为 float[] 并且值需要介于 -1 和 1 之间

转载 作者:太空宇宙 更新时间:2023-11-03 22:58:48 24 4
gpt4 key购买 nike

如果我做对了,我不会这样做,但我正在使用此方法将字节数组转换为 float 组,如本 link 所示。 :

public static float[] ConvertByteToFloat(byte[] array) {   
float[] floatArr = new float[array.Length / 4];
for (int i = 0; i < floatArr.Length; i++) {
if (BitConverter.IsLittleEndian) {
Array.Reverse(array, i * 4, 4);
}
floatArr[i] = BitConverter.ToSingle(array, i * 4);
}
return floatArr;
}

输入数组是一个包含波形原始数据的数组(没有标题)

问题是我得到(转换后)像这样的值:

-9.66012E+24, 1963.15576, -5.11384777E-36, -1.19718621E-07

如何将此数组转换为 float 组且其值应介于 -1.0 和 1.0 之间?

编辑:

我的输入数组是这样开始的:

byte[] {
232,
255,
235,
255,
232,
255,
235,
255,
232,
255,
235,
255,
232,
255,
235,
255,
...
}

最佳答案

可以看看the implementation of WriteSample() :

    public void WriteSample(float sample)
{
if (WaveFormat.BitsPerSample == 16)
{
writer.Write((Int16)(Int16.MaxValue * sample));
dataChunkSize += 2;
}
...

请注意它如何通过将 float 乘以 Int16.MaxValue 将其转换为 16 位有符号整数。这是因为内部数据格式是介于 -Int16.MaxValue 和 +Int16.MaxValue 之间的有符号 16 位整数。

这意味着您正在使用的值是 Int16(又名 short),您需要将它们除以 将它们转换回 float Int16.MaxValue.

例如,给定您的示例输入:

byte[] bytes = { 232, 255, 235, 255, 232, 255, 235, 255, 232, 255, 235, 255, 232, 255, 235, 255 };

for (int i = 0; i < bytes.Length - 4; i += 4)
{
float f = BitConverter.ToInt16(bytes, i) / (float)Int16.MaxValue;
Console.WriteLine(f);
}

关于c# - 将原始字节数据转换为 float[] 并且值需要介于 -1 和 1 之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44111155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com