2012-10-16 6 views

risposta

1

avete bisogno di sfuggire la barra su davanti alla \x:

sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i); 
//    ^------- Here 

a seconda di cosa uscita che si desidera raggiungere, potrebbe essere necessario per sfuggire alle rimanenti tagli pure.

Attualmente lo snippet produce una sequenza di sei caratteri con il codice 0xFF. Se questo è quello che vuoi, il tuo frammento di codice è completo. Se volete vedere una sequenza di \xFF letterali, cioè una stringa che assomiglia \x5\xFF\xFF\xFF\xFF\xFF\xFF quando i == 5, è necessario fuggire tutti i tagli nella stringa:

sprintf(s1"DTLK\\x%x\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF",i); 
//   ^^^^^^^

Infine, se si desidera che il valore formattato come codice esadecimale a due cifre anche se il valore è inferiore a sedici, utilizzare il codice di formato %02x per indicare a sprintf che si desidera uno zero iniziale.

+0

Penso piuttosto che voglia il contrario: il '\ xFF' dovrebbe espandersi al valore' 0xFF' mentre dopo il 'DTLK' vuole un valore variabile ... – glglgl

+0

@glglgl È difficile dirlo con certezza, ma questa è l'unica ragione per cui penso che l'OP chiederà specificamente un valore esadecimale. – dasblinkenlight

+0

Alcune persone mescolano i personaggi stessi con la loro rappresentazione; è per questo che penso il contrario. YMMV. – glglgl

0

\x si aspetta un valore esadecimale come \xC9.

Se si desidera includere \x nell'output, è necessario fuggire \ con \\:

sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i); 
+0

Penso piuttosto che vuole che il quinto byte sia 0..10 ... – glglgl

0

Supponendo che non vuole avere letteralmente \x00 .. \x0A, ma il corrispondente di byte, è necessario

sprintf(s1, "DTLK%c\xFF\xFF\xFF\xFF\xFF\xFF",i); 

durante l'inserimento \x%x sarebbe al livello di astrazione sbagliato ...

Se, OTOH, si desidera letteralmente avere letteralmente i caratteri esadecimali anziché i byte con i nomi hey cahracters come loro rappresentazione, le altre risposte potrebbero essere più utili.

0
sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i); 
//    ^------- Here 

A seconda di cosa uscita che si desidera raggiungere, potrebbe essere necessario per sfuggire alle rimanenti tagli pure.

Attualmente lo snippet produce una sequenza di sei caratteri con il codice 0xFF. Se questo è quello che vuoi, il tuo frammento di codice è completo. Se volete vedere una sequenza di \xFF letterali, cioè una stringa che assomiglia \x5\xFF\xFF\xFF\xFF\xFF\xFF quando i == 5, è necessario fuggire tutti i tagli nella stringa:

sprintf(s1"DTLK\\x%x\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF",i); 

//   ^^^^^^^

Infine, se si desidera che il valore formattato come codice esadecimale a due cifre anche se il valore è inferiore a 16, utilizzare il codice di formato %02x per indicare a sprintf che si desidera uno zero iniziale.