2012-10-16 51 views

回答

1

您需要在逃避斜線在\x的面前:

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

根據您想達到什麼樣的輸出,你可能需要逃避剩餘的斜線爲好。

目前,片段會產生一個由6個字符組成的序列,其代碼爲0xFF。如果這是你想要的,你的代碼片段是完整的。如果你想看到的\xFF文字序列,即貌似\x5\xFF\xFF\xFF\xFF\xFF\xFFi == 5,你需要逃避所有斜槓字符串中的字符串:

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

最後,如果您想格式化爲一個值兩位十六進制代碼,即使值小於十六,使用%02x格式代碼告訴sprintf您想要一個前導零。

+0

我寧願以另一種方式想:'\ xFF'應該展開到'0xFF'的值,而在'DTLK'之後,他想要一個變量值... – glglgl

+0

@glglgl這很難說,但是,這是我認爲OP會特別要求十六進制值的唯一原因。 – dasblinkenlight

+0

有些人將自己的角色與他們的表現混爲一談;這就是爲什麼我認爲相反。因人而異。 – glglgl

0

\x需要十六進制值,如\xC9

如果你想包括\x在輸出中,你需要逃避\\\

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

我寧願認爲他希望第5個字節是0..10 ... – glglgl

0

假如你不希望從字面上\x00 .. \x0A,但相應的字節,你需要

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

同時插入​​會在錯誤的抽象層次...

如果OTOH你真的想要十六進制字符而不是帶有命名hey cahracters的字節作爲它們的表示,其他答案可能會更有幫助。

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

根據您希望達到的輸出,您可能還需要轉義剩餘的斜槓。

目前,片段會產生一個由6個字符組成的序列,其代碼爲0xFF。如果這是你想要的,你的代碼片段是完整的。如果你想看到的\xFF文字序列,即貌似\x5\xFF\xFF\xFF\xFF\xFF\xFFi == 5,你需要逃避所有斜槓字符串中的字符串:

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

//   ^^^^^^^

最後,如果您想格式化爲一個值即使值小於16也是兩位十六進制代碼,請使用%02x格式代碼告訴sprintf您需要前導零。

相關問題