Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C#] Suddivisione di un array di bytes in parti di 4

    Salve a tutti,
    Ho un problema e non avendo trovato soluzioni con il buon bigG vorrei sottoporlo a tutti voi, sapendo che sarà sicuramente utile a qualcun altro.

    Nella mia applicazione ho un stringa. Questa viene convertita in bytes e dovrebbe essere suddivisa in blocchi di 4 bytes ciascuno per essere successivamente elaborata..(ma questa è un'altra storia..).
    Il problema è che qualsiasi numero di bytes costituisca la stringa dovrei sempre arrivare ad avere un numero di blocchi che contenga sempre 4 bytes ciascuno, aggiungendo eventualmente bytes uguali a 0 se i bytes da dividere non sono multipli di 4.
    Spero di essermi spiegato
    Io per ora sto utilizzando questo codice.
    codice:
     ArrayList TDPtoSend = new ArrayList();
                //ora con un ciclo 
                for (int i = 0; i <= buffer.Length -1 ; i= i+4)
                {
                    //array di 4 byte
                    byte[] buff = new byte[4];
                    buff[0] = buffer[i];
                    //si controlla di non uscire da buffer
                    if ((i + 1) < buffer.Length - 1)
                    {
                        buff[1] = buffer[i + 1];
                    }
                    //se no si aggiunge un byte vuoto
                    else { buff[1] = 0000; }
    
                    if ((i + 2) < buffer.Length - 1)
                    {
                        buff[2] = buffer[i + 1];
                    }
                    //se no si aggiunge un byte vuoto
                    else { buff[2] = 0000; }
    
                    if ((i + 3) < buffer.Length - 1)
                    {
                        buff[3] = buffer[i + 1];
                    }
                    //se no si aggiunge un byte vuoto
                    else { buff[3] = 0000; }
                    
                    //si crea un nuovo oggetto TDP e lo si aggiunge
                    TDP New = new TDP(buff);
                    TDPtoSend.Add(New);
                }
    praticamente questi blocchi sono immagazzinati come un'oggetto creato da me "TDPtosend" e inseriti in un arraylist.
    il "buffer" è l'array di bytes che contiene i dati da dividere

    Grazie per l'aiuto a tutti!!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    ... fatte tutte le premesse, il problema specifico qual è?

    Esiste una domanda precisa?

    Malfunzionamenti, errori?

    E dove pensi che siano?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Scusate mi sono accorto che era solo un piccolo errore concettuale..
    Ho risolto, ma se volete scrivo qui il codice completo che magari potrebbe essere utile a qualcun altro
    codice:
     byte[] buffer = UTF8Encoding.UTF8.GetBytes(sToSend);
                //ora suddividiamola in vari blocchi da 4 byte
                //bisogna rendere il numero d bytes un multiplo di 4
                //trovo il resto della divisione
                int res = buffer.Length % 4;
                //ora a seconda dei casi aggiungo i bytes necessari
                //buffer finale
                byte[] buffer2;
                switch (res)
                {
                    case 0:
                        //va bene cosi
                        buffer2 = buffer;
                        break;
                    case 1:
                        //si aggiungono 3 bytes vuoti
                        //nuovo array della giusta lunghezza
                        buffer2 = new byte[buffer.Length +3];
                        //copia
                        Buffer.BlockCopy(buffer,0,buffer2 ,0,buffer.Length);
                        //aggiunta byte vuoti
                        buffer2[buffer2.Length - 3] = 0;
                        buffer2[buffer2.Length - 2] = 0;
                        buffer2[buffer2.Length - 1] = 0;
                        break;
                    case 2:
                        //si aggiungono 2 bytes
                        buffer2 = new byte[buffer.Length +2];
                        //copia
                        Buffer.BlockCopy(buffer,0,buffer2 ,0,buffer.Length);
                        //aggiunta byte vuoti
                        buffer2[buffer2.Length - 2] = 0;
                        buffer2[buffer2.Length - 1] = 0;
                        break;
                    case 3:
                        //si aggiungono 2 bytes
                        buffer2 = new byte[buffer.Length + 1];
                        //copia
                        Buffer.BlockCopy(buffer, 0, buffer2, 0, buffer.Length);
                        //aggiunta byte vuoti
                        buffer2[buffer2.Length - 1] = 0;
                        break;
                    default:
                        buffer2 = buffer;
                        break;
                }
                //arrayList di oggetti tdp
                ArrayList TDPtoSend = new ArrayList();
                //ora con un ciclo si dividono in pacchetti TDP
                for (int i = 0; i <= buffer2.Length - 5; i = i + 4)
                {
                    //array di 4 byte
                    byte[] buff = new byte[4];
                    buff[0] = buffer2[i];
                    //si controlla di non uscire da buffer
                    buff[1] = buffer2[i + 1];
                    buff[2] = buffer2[i + 2];
                    buff[3] = buffer2[i + 3];
                    
                    //si crea un nuovo oggetto TDP e lo si aggiunge
                    TDP New = new TDP(buff);
                    TDPtoSend.Add(New);
                }

    grazie comunque per l'attenzione!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.