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.
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
@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
Niektórzy ludzie mieszają znaki z ich reprezentacją; dlatego myślę, że jest odwrotnie. YMMV. – glglgl