Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2012
    Messaggi
    10

    [C] Stampa di una struttura

    Salve,
    ho un programma C con una struttura complessa con dati misti.
    Volevo sapere se c'è un modo per stampare la struttura nel suo complesso, come se fosse una stringa unica.

    Vorrei comparare byte x byte la struttura prodotta da 2 programmi differenti, in quanto se stampo i singoli elementi sono uguali però alla fine ottengo risultati diversi.

    Grazie

    Ciao

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Con una funzione ad hoc.
    L'operatore == confronta byte a byte. Se hai un puntatore alla struttura puoi fare (*pa) == (*pb) oppure usare memcmp.
    Una nota, se sono contenuti puntatori all'interno di tale struttura quasi certamente non vorrai comparare le due strutture byte a byte in quanto risulterebbero uguali SOLO nel caso i puntatori puntassero ALLA STESSA AREA DI MEMORIA.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2012
    Messaggi
    10
    Ciao,
    io però vorrei stampare byte a byte la struttura in quanto non posso fare il confronto in quanto sono su 2 programmi differenti
    Nella struttura non ci sono puntatori ma solo dati
    Grazie.

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Non puoi salvare la struttura in un file binario?
    Altrimenti puoi codificarla in base64
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2012
    Messaggi
    10
    Ciao,
    ho stampato le aree usando questa funzione:
    for(int i=0; i<parms->haa_uxpr_array_elements; i++)
    à
    int *ptr = &nodeÝi¨;
    printf(">");
    for(int j=0; j<50; j++)
    à
    printf("%.1x", *ptr);
    ptr ++;
    è
    printf("<çn");
    è
    Ed effettivamenre un piccola differenza fra le due strutture l'ho trovata.
    Però non capisco una cosa
    La prima parte della struttuta è così definita
    typedef struct pregen_node_sà
    int pregen_bwd;
    /* Internal use only (linklist) */
    int pregen_fwd;
    /* Internal use only (linklist) */
    unsigned char pregen_ptrÝ8¨;
    /* Internal use only (struct ptr) */
    unsigned char pregen_type;
    /* J-Job, S-Step, O-Object */
    unsigned char _filler1Ý3¨;
    int pregen_job_seq;
    int pregen_step_seq;
    int pregen_obj_seq;
    int pregen_obj_seq2;
    union à
    .....
    visualizzando i dati con la mia funzione vedo questi dati
    >22c291c822c296b0482b568e20000001100d9c5c7f0f0f1f0f1300c50000000000
    e il valore di pregen_ptr è 482b568
    metre se faccio una printf
    printf("ptr -> %x çn", node->pregen_ptr);
    ottengo questo valore 22c29444
    Perchè???
    Lavoro sotto host quindi alcuni caratteri non corrispondono!
    Ultima modifica di foxes; 17-10-2014 a 10:00

  6. #6
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Supponendo un char 8 bit i valori variano al massimo da 0 a FF, come puoi ottenere più di due caratteri?
    Sta di fatto che quel codice è illeggibile.
    Ci sono funzioni già scritte per base64, perché ti devi complicare la vita con printf?
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2012
    Messaggi
    10
    Quote Originariamente inviata da Scara95 Visualizza il messaggio
    Supponendo un char 8 bit i valori variano al massimo da 0 a FF, come puoi ottenere più di due caratteri?
    Sta di fatto che quel codice è illeggibile.
    Ci sono funzioni già scritte per base64, perché ti devi complicare la vita con printf?
    ma per base64 c'è una libreria da includere?
    Io posso usare solo le standard.
    Mi potresti dare dei link dove posso trovare degli esempi. Grazie

    Per quanto riguarda il codice se io vado a convertire posizionalmente i caratteri delle funzione ottengo perfettamente i valori sia numerici che alfanumerici che mi restituirebbe una printf per quel campo. L'unica incongruenza la trovo in quel campo che ti ho evidenziato.
    Ultima modifica di foxes; 17-10-2014 a 10:53

  8. #8
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Quote Originariamente inviata da foxes Visualizza il messaggio
    ma per base64 c'è una libreria da includere?
    Io posso usare solo le standard.
    Mi potresti dare dei link dove posso trovare degli esempi. Grazie

    Per quanto riguarda il codice se io vado a convertire posizionalmente i caratteri delle funzione ottengo perfettamente i valori sia numerici che alfanumerici che mi restituirebbe una printf per quel campo. L'unica incongruenza la trovo in quel campo che ti ho evidenziato.
    Sto tentando di dirti che non puoi stampare una stringa in quel modo perché tu stai passando a printf un puntatore a intero (4/8 byte a seconda) e non a char (1 byte) per cui non otterrai mai i valori corretti, ma leggerai anche parte dei successivi. Inoltre si aggiunge il problema dell'allineamento della struttura ( http://stackoverflow.com/questions/4...ucture-packing ).

    P.s. prima non avevo considerato l'allineamento.
    Ultima modifica di Scara95; 17-10-2014 a 11:15
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2012
    Messaggi
    10
    Scusami vorrei farti un'altra domanda.
    Perchè se io faccio struc1 = strct2 non mi copia i dati correttamente, che funzione dovrei usare per la copia corretta?

    Grazie

  10. #10
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    = fa una copia byte a byte.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

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 © 2024 vBulletin Solutions, Inc. All rights reserved.