2008-10-03 5 views
0

J'ai un tableau byte() retourné comme résultat de la capture de son DirectX, mais pour les autres parties de mon programme, je veux traiter les résultats en single(). Trundling est-il le moyen le plus rapide de le faire ou est-il une façon intelligente de le faire?Débutant: moyen le plus rapide de lancer/copier byte() en single()

Le code qui obtient est

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

qui crée le tableau d'octets, peut CTYPE gérer seul? (Notez, je ne peux pas trouver un moyen de le faire!)

Répondre

-1

Essayez

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

En VB (je pense):

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

Ce n'est pas ce qu'il demande. En outre, VB n'utilise pas de point-virgule! Je fais cette erreur chaque fois que je suis forcé de toucher VB ;-) –

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; 
} 

Le meilleur moyen de faire cela (en termes de performance par opposition à combien de temps il faut pour écrire) serait probablement d'utiliser l'appel API CopyMemory.

+0

devrez peut-être ajouter une vérification pour m'assurer que bytearray.Length% 4 == 0? –

+0

Son tableau d'octets provient de données audio, donc la longueur ne sera probablement pas souvent un multiple de 4. – MusiGenesis

+0

L'a corrigé. Merci Mitch. – MusiGenesis

Questions connexes