Cosa significa questa assegnazione ???

di vindro il
7 risposte

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

  • 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). 

  • 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));
  • 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. 

  • @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 ;-) 

  • 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    ;-)

  • 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

  • 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