2012-10-16 13 views
5

enthalten Ich möchte Wert von i Hex-Format in c enthalten.Wie hex Wert in Zeichenfolge mit Sprintf

for(i=0;i<10;i++) 
    sprintf(s1"DTLK\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i); 

aber der obige Code gibt einen Fehler: \ x ohne folgenden hexadezimalen Ziffern verwendet

Pls jemand schlagen mir eine richtige Art und Weise ....

Antwort

1

Sie müssen den Schrägstrich entkommen vor dem \x:

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

Je nachdem, was Ausgabe, die Sie erreichen möchten, müssen Sie die verbleibenden Schrägstriche als auch entkommen.

Derzeit erzeugt das Snippet eine Sequenz von sechs Zeichen mit dem Code 0xFF. Wenn dies gewünscht ist, ist Ihr Codefragment vollständig. Wenn Sie möchten, dass eine Folge von \xFF Literale sehen, dh eine Zeichenfolge, die wie \x5\xFF\xFF\xFF\xFF\xFF\xFF aussehen, wenn i == 5, müssen Sie alle Schrägstriche in der Zeichenfolge entkommen:

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

Schließlich, wenn Sie den Wert als eine formatierte mögen zweistelliger Hexadezimalcode, selbst wenn der Wert kleiner als sechzehn ist, verwenden Sie den Formatcode %02x, um sprintf mitzuteilen, dass Sie eine führende Null haben möchten.

+0

Ich denke eher, er will den anderen Weg: die '\ xFF' sollte auf den Wert' 0xFF' erweitern, während nach der 'DTLK' er will einen variablen Wert ... – glglgl

+0

@glglgl Es ist schwer zu sagen, aber sicher das ist der einzige Grund, warum ich denke, dass das OP speziell nach einem Hex-Wert fragen würde. – dasblinkenlight

+0

Manche Leute verwechseln die Charaktere selbst mit ihrer Darstellung; deshalb denke ich das Gegenteil. YMMV. – glglgl

0

\x erwartet einen Hexadezimalwert wie \xC9.

Wenn Sie \x in der Ausgabe enthalten sein sollen, müssen Sie \ mit \\ zu entkommen:

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

Ich denke eher, er möchte das 5. Byte 0..10 sein ... – glglgl

0

Angenommen, Sie wollen nicht buchstäblich \x00 haben .. \x0A, aber das entsprechende Byte, die Sie benötigen

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

während \x%x Einfügen an der falschen Abstraktionsebene wäre ...

Wenn Sie, OTOH, wirklich die hexadezimalen Zeichen anstelle der Bytes mit den Namen hey cahracters als ihre Repräsentation haben wollen, könnten die anderen Antworten hilfreicher sein.

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

Je nachdem, welche Ausgabe Sie erreichen möchten, müssen Sie möglicherweise auch die verbleibenden Schrägstriche fliehen.

Derzeit erzeugt das Snippet eine Sequenz von sechs Zeichen mit dem Code 0xFF. Wenn dies gewünscht ist, ist Ihr Codefragment vollständig. Wenn Sie möchten, dass eine Folge von \xFF Literale sehen, dh eine Zeichenfolge, die wie \x5\xFF\xFF\xFF\xFF\xFF\xFF aussehen, wenn i == 5, müssen Sie alle Schrägstriche in der Zeichenfolge entkommen:

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

//   ^^^^^^^

Schließlich, wenn Sie den Wert als eine formatierte mögen Zweistelliger Hexadezimalcode, selbst wenn der Wert kleiner als 16 ist, verwenden Sie den Formatcode %02x, um sprintf mitzuteilen, dass Sie eine führende Null haben möchten.