2008-10-03 5 views
0

У меня есть массив byte(), возвращенный как результат захвата звука directx, но для других частей моей программы я хочу рассматривать результаты как одиночные(). Касается ли элемент массива по наименьшему способу его выполнения или есть умный способ сделать это?Начинающий: Самый быстрый способ бросить/скопировать байт() в одиночный()

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

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

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

ответ

-1

Попробуйте

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

В VB (я думаю):

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

Это не то, что он просит. Кроме того, VB не использует точку с запятой! Я делаю эту ошибку, когда мне приходится прикасаться к VB ;-) – 2008-10-05 11:58:10

1
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

, возможно, потребуется добавить чек, чтобы убедиться, что bytearray.Length% 4 == 0? – 2008-10-05 11:17:11