Начинающий: Самый быстрый способ приведения / копирования byte () в single () - PullRequest
0 голосов
/ 03 октября 2008

Я получил массив byte (), возвращенный как результат захвата звука Directx, но для других частей моей программы я хочу обработать результаты как single (). Является ли переход по элементу массива за элементом самым быстрым способом сделать это или есть умный способ сделать это?

Код, который получает это

CType(Me._applicationBuffer.Read(Me._nextCaptureOffset, GetType(Byte), LockFlag.None, LockSize), Byte())

, который создает байтовый массив, может ли Ctype обрабатывать один? (заметьте, я не могу придумать, как это сделать!)

Ответы [ 2 ]

1 голос
/ 05 октября 2008
public float[] ByteArrayToFloatArray(byte[] byteArray)
{
    float[] floatArray = new float[byteArray.Length / 4];
    for (int i = 0; i < floatArray.Length; i++)
    {
        floatArray[i] = BitConverter.ToSingle(byteArray, i * 4);
    }
    return floatArray;
}

Самый быстрый способ сделать это (с точки зрения производительности, в отличие от того, сколько времени занимает запись), вероятно, использовать вызов API CopyMemory .

0 голосов
/ 03 октября 2008

Попробуйте

float f = BitConverter.ToSingle(bytearray, 0);

В VB (я думаю):

Dim single s;
s = BitConverter.ToSingle(bytearray, 0);
...