Problème avec le tableau d’octets

la programmation


Je travaille actuellement sur un projet comportant un tableau d’octets pour stocker les données audio (pcm). Lorsque je modifie le tableau, le tableau reste inchangé.

Le code utilisé.
octet privé[] RawAudio ;

Lorsque j’utilise une fonction à l’intérieur d’une classe pour inverser le tableau, le tableau reste inchangé.

Le code utilisé pour modifier le tableau rawAudio

C#
Public void Reverse()
{
    int i = 0;
    int j = rawAudio.Lenght - 1;
    While(i < j)
    {
         byte temp = rawAudio[i];
         rawAudio[i] = rawAudio[j];
         rawAudio[j] = temp;
         i++;
         j--;
    }
}

Il semble que toute manipulation sur le tableau laisse le tableau inchangé. Quelle pourrait être la raison pour laquelle le tableau ne change pas alors que je modifie en fait le tableau.

Ce que j’ai essayé :

J’ai essayé de modifier le tableau et d’utiliser Array Reverse avec le même problème de tableau non mis à jour.

Solution 1

Pourquoi réinventer la roue ?

Il existe déjà une méthode capable d’inverser un tableau.

Une documentation ainsi qu’un exemple peuvent être trouvés ici :
Méthode Array.Reverse (Système) | Microsoft Apprendre[^]

Solution 2

Vous avez une faute de frappe dans votre code qui n’entraîne rien car vous ne vérifiez pas les erreurs dans votre code et vous n’avez probablement pas utilisé le débogueur –

C#
int j = rawAudio.Lenght - 1; //error here

‘La longueur doit être ‘Longueur’

Pour gérer les erreurs, votre code devrait ressembler à :

C#
public void Reverse()
{
    if (rawAudio == null)
    {
        //Handle the case if rawAudio is null...
        Console.WriteLine("Error: My rawAudio array is null.");
        return;
    }

    int length = rawAudio.Length;

    if (length == 0)
    {
        //Handle the case if your rawAudio is an empty array...
        Console.WriteLine("Error: My rawAudio array is empty.");
        return;
    }

    int i = 0;
    int j = length - 1;

    while (i < j)
    {
        byte temp = rawAudio[i];
        rawAudio[i] = rawAudio[j];
        rawAudio[j] = temp;
        i++;
        j--;
    }
}

コメント

タイトルとURLをコピーしました