PDA

View Full Version : [C++]Chi mi aiuta con questa sintassi?


Tubo Catodico
16-09-2008, 09:59
Non riesco a capire come leggere la seguente sintassi:

buffer[6] = ( 0 )&0xff;

Cioè in buffer[6] viene messo l'and logico tra 0 e ff in esadecimale....ma non fà zero? Perchè poi lo zero è tra parentesi, fa un qualche strano cast?

banryu79
16-09-2008, 11:25
Il singolo "ampersand" (&) non è l'and logico (l'and logico boolean è il doppio ampersand &&) ma è l'operatore bitwise AND.


Cioè in buffer[6] viene messo l'and logico tra 0 e ff in esadecimale....ma non fà zero?

Ehm, sembrerebbe di sì :stordita:


Perchè poi lo zero è tra parentesi, fa un qualche strano cast?

cast to zero? :D
No, nessun cast, credo che le parentesi lì vengano interpretate dal parser come operatori di precedenza. Il perchè siano lì, forse solo l'autore del codice lo sa.
Propendo fortemente per una questione di "gusto" personale se proprio devo trovare una ragione logica, altrimenti per un qualsiasi motivo illogico.

Spezzone di codice tratto da un contest di obfuscated C code? :D

Ziosilvio
16-09-2008, 14:38
Sembra quasi un modo di evitare effetti collaterali nella scrittura del valore zero in buffer[6], il quale probabilmente è un char.

Ma allora, non sarebbe stato meno contorto inizializzarlo a '\0'?

banryu79
16-09-2008, 14:51
Sembra quasi un modo di evitare effetti collaterali nella scrittura del valore zero in buffer[6], il quale probabilmente è un char.

Ma allora, non sarebbe stato meno contorto inizializzarlo a '\0'?

Ottimo non ci avevo pensato, in effetti il char viene usato anche per storare il valore di un byte. Sarebbe senz'altro stato meno contorto valorizzarlo a '\0', ma forse lo scopo era essere contorti (contest? :D )

Tubo Catodico
16-09-2008, 15:22
Si prepara un pacchetto TS (transport stream) da inviare tramite rete. Prima viene costruito l'header e poi su tutti i byte rimantenti del pacchetto viene effettuata quest'operazione (che da quel che ho capito è una sorta di strana inizializzazione a 0) tranne che sugli ultimi due che diventano:

p_ts->p_buffer[10]= ( ( 0 )&0x80 ) | 0x7e;
p_ts->p_buffer[11]= 0;

Il codice è tratto niente di meno che da VLC, ergo i programmatori dovrebbero essere con i controc...i ed avranno la loro buona ragione....che non conosco :D

banryu79
16-09-2008, 16:52
Si prepara un pacchetto TS (transport stream) da inviare tramite rete. Prima viene costruito l'header e poi su tutti i byte rimantenti del pacchetto viene effettuata quest'operazione (che da quel che ho capito è una sorta di strana inizializzazione a 0) tranne che sugli ultimi due che diventano:

p_ts->p_buffer[10]= ( ( 0 )&0x80 ) | 0x7e;
p_ts->p_buffer[11]= 0;

Il codice è tratto niente di meno che da VLC, ergo i programmatori dovrebbero essere con i controc...i ed avranno la loro buona ragione....che non conosco :D
Questo mistero è davvero misterioso. Forse avendo programmato per così tanto tempo inizializzare direttamente a 0 gli è venuto a noia :D

Magari uno scopo c'è.
Bisognerebbe capire se la presenza di "codice apparentemente superfluo" è importante:
a) di per se', cioè per avere proprio a livello di sorgente il codice siffatto;
oppure
b) per quello che fa, (le operazioni al di là del risultato?)

Boh, senza sapere altro è da pippe mentali :D

cdimauro
16-09-2008, 20:18
Si vede che siete dei niubbi e che non ne capite niente: questo è un evidente esempio dell'arcinota qualità del codice dei progetti open source. :O












































:asd:

banryu79
17-09-2008, 08:27
Ma vaffa... :asd:

Tubo Catodico
17-09-2008, 08:31
:mbe: :doh: