2012-10-16 12 views

Odpowiedz

1

Musisz uciec na ukośnik przód \x:

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

zależności od wyjściowego chcesz osiągnąć, być może trzeba będzie uciec pozostałe ukośniki, jak również.

Obecnie fragment kodu tworzy ciąg sześciu znaków z kodem 0xFF. Jeśli tego chcesz, fragment kodu jest kompletny. Jeżeli chcesz zobaczyć sekwencję \xFF literały, czyli ciąg znaków, który wygląda jak \x5\xFF\xFF\xFF\xFF\xFF\xFF gdy i == 5, trzeba uciec wszystkie ukośniki w ciągu:

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

Wreszcie, jeśli chciałbyś wartość sformatowaną jako dwucyfrowy kod szesnastkowy, nawet jeśli wartość jest mniejsza niż szesnaście, użyj kodu formatu %02x, aby powiedzieć sprintf, że chcesz mieć wiodące zero.

+0

Raczej myślę, że chce w inny sposób: '\ xFF' powinien rozwinąć się do wartości' 0xFF' podczas gdy 'DTLK' chce wartości zmiennej ... – glglgl

+0

@glglgl Trudno powiedzieć na pewno, ale to jedyny powód, dla którego uważam, że PO będzie prosił konkretnie o wartość heksadecymalną. – dasblinkenlight

+0

Niektórzy ludzie mieszają znaki z ich reprezentacją; dlatego myślę, że jest odwrotnie. YMMV. – glglgl

0

\x oczekuje wartości szesnastkowej, takiej jak \xC9.

Jeśli chcesz dołączyć \x w twojej mocy, trzeba uciec \ z \\:

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

Raczej myślę, że chce, aby 5 bajt był 0..10 ... – glglgl

0

Przypuśćmy, że nie chcesz, aby dosłownie \x00 .. \x0A, ale odpowiedni bajt, trzeba

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

podczas wkładania \x%x byłoby w złym poziomie abstrakcji ...

Jeśli, OTOH, naprawdę chcesz dosłownie mieć znaki szesnastkowe zamiast bajtów z nazwanymi hej cahr znakami jako ich reprezentacją, inne odpowiedzi mogą być bardziej pomocne.

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

W zależności od tego, jakie wyniki chciałbyś uzyskać, być może będziesz musiał również uciec z pozostałych ukośników.

Obecnie fragment kodu tworzy ciąg sześciu znaków z kodem 0xFF. Jeśli tego chcesz, fragment kodu jest kompletny. Jeżeli chcesz zobaczyć sekwencję \xFF literały, czyli ciąg znaków, który wygląda jak \x5\xFF\xFF\xFF\xFF\xFF\xFF gdy i == 5, trzeba uciec wszystkie ukośniki w ciągu:

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

//   ^^^^^^^

Wreszcie, jeśli chciałbyś wartość sformatowaną jako dwucyfrowy kod szesnastkowy, nawet jeśli wartość jest mniejsza niż 16, użyj kodu formatu %02x, aby powiedzieć sprintf, że chcesz mieć wiodące zero.

Powiązane problemy