Cosa significa questa assegnazione ???

di il
7 risposte

Cosa significa questa assegnazione ???

Salve forum ! Ho bisogno di una veloce consultazione. 

Premetto che conosco abbastanza bene il linguaggio C++ ma a volte ( tipo adesso ) si trovano delle righe di codice molto curiose …

Comunque, volevo solo sapere cosa significa la scrittura char *pCord = (char *) (&messageType);

Tale scrittura è inserita nel seguente blocco di codice:

char sendHeaderBuf[TRANSFORM_HEADER_LENGTH];   
memset(sendHeaderBuf, 0, TRANSFORM_HEADER_LENGTH);
char *pCord = (char *)(&messageType);
int intLen = sizeof(int);

for (int i = 0; i < intLen; i++) {
        sendHeaderBuf[i] = pCord[i];
}

Queste righe fanno parte di un metodo ( scritto da terzi ) che servirebbe per inviare dei comandi verso una telecamera collegata in rete (LAN).

Grazie in anticipo !!!

7 Risposte

  • Re: Cosa significa questa assegnazione ???

    Il codice dovrebbe scomporre messageType in una sequenza di byte (char) da memorizzare nel vettore sendHeaderBuff.

    La riga in rosso prende l'indirizzo di messageType, lo converte in puntatore a char e lo assegna a pCord

    Essendo pCord un char*, quando vai a leggere il valore puntato ti darà solo il primo byte. Per questo va incrementato tante volte quanti byte è lunga la variabile per copiarla tutta. La lunghezza di messagetype è data da sizeof(int) (da qui suppongo che la variabile sia di tipo int). 

  • Re: Cosa significa questa assegnazione ???

    Beh, questo è codice abbastanza basilare in C, mi meraviglia che tu dica di conoscere “abbastanza bene” il C++.

    Forse dovresti dare una ripassatina ai puntatori.

    In realtà tutte le linee seguenti 

    char *pCord = (char *)(&messageType);
    int intLen = sizeof(int);
    
    for (int i = 0; i < intLen; i++) {
            sendHeaderBuf[i] = pCord[i];
    }

    le potresti sostituire con la semplice

    memcpy(sendHeaderBuf, (char*)&messageType, sizeof(int));
  • Re: Cosa significa questa assegnazione ???

    Grazie @Alexv della risposta precisa e concisa, ora mi è tutto molto più chiaro. Si, messagetype è di tipo int.

    @oregon infatti ho scritto “ abbastanza bene ” e non “ alla perfezione ”… non lo uso così spesso. 

  • Re: Cosa significa questa assegnazione ???

    @vindro il tuo concetto di “abbastanza bene” e' PARECCHIO diverso dal nostro ;-)

    Dalle nostre parti, “abbastanza bene” vuol dire “conoscere alla perfezione” le 1300 (mille trecento) pagine del manuale di riferimento del C++

    The C++ Programming Language (di Bjarne Stroupstrup).

    Invece, “conoscerlo alla perfezione” vuol dire conoscere il succitato libro PIU' le specifiche (2000 pagine ma anche di piu') e TUTTI i corrolari: dalla meta programmazione basata su template, a tutti i dettagli sulle STL, e librerie correlate. Diciamo altre 5000/10000 (diecimila) pagine.

    Nel tuo caso ti sei fermato a pagina 50, ad essere buoni ;-) 

    Diciamo che c'e' una differenza di DUE/tre ORDINI di grandezza ;-)

    Vabbe', in un mondo in cui il testo di riferimento di qualunque cosa sono delle slide, probabilmente lo conosci molto meglio di noi ;-) 

  • Re: Cosa significa questa assegnazione ???

    11/04/2023 - migliorabile ha scritto:


    @vindro il tuo concetto di “abbastanza bene” e' PARECCHIO diverso dal nostro ;-)

    Può essere … sicuramente e come già detto, se cerchi un “esperto” del C++ non guardare qui    ;-)

  • Re: Cosa significa questa assegnazione ???

    11/04/2023 - vindro ha scritto:


    @oregon infatti ho scritto “ abbastanza bene ” e non “ alla perfezione ”… non lo uso così spesso. 

    Sono contento che tu abbia ringraziato anche me per averti dato un codice alternativo, essermi espresso con franchezza e dato un suggerimento per migliorare la tua preparazione che, al momento, non è buona, non è abbastanza buona, direi semmai insufficiente. Buono studio

  • Re: Cosa significa questa assegnazione ???

    11/04/2023 - oregon ha scritto:


    Sono contento che tu abbia ringraziato anche me per averti dato un codice alternativo, essermi espresso con franchezza e dato un suggerimento per migliorare la tua preparazione che, al momento, non è buona, non è abbastanza buona, direi semmai insufficiente. Buono studio

    Su questo hai perfettamente ragione … mi sono espresso male, perdòn. Il tuo suggerimento è molto apprezzato. Grazie.

Devi accedere o registrarti per scrivere nel forum
7 risposte