我想在c中包含i十六進制格式的值。如何使用sprintf在字符串中包含十六進制值
for(i=0;i<10;i++)
sprintf(s1"DTLK\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i);
,但上面的代碼輸出錯誤:\ X沒有以下十六進制數字
請任何一個建議我適當的方式使用....
我想在c中包含i十六進制格式的值。如何使用sprintf在字符串中包含十六進制值
for(i=0;i<10;i++)
sprintf(s1"DTLK\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i);
,但上面的代碼輸出錯誤:\ X沒有以下十六進制數字
請任何一個建議我適當的方式使用....
您需要在逃避斜線在\x
的面前:
sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i);
// ^------- Here
根據您想達到什麼樣的輸出,你可能需要逃避剩餘的斜線爲好。
目前,片段會產生一個由6個字符組成的序列,其代碼爲0xFF
。如果這是你想要的,你的代碼片段是完整的。如果你想看到的\xFF
文字序列,即貌似\x5\xFF\xFF\xFF\xFF\xFF\xFF
時i == 5
,你需要逃避所有斜槓字符串中的字符串:
sprintf(s1"DTLK\\x%x\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF",i);
// ^^^^^^^
最後,如果您想格式化爲一個值兩位十六進制代碼,即使值小於十六,使用%02x
格式代碼告訴sprintf
您想要一個前導零。
\x
需要十六進制值,如\xC9
。
如果你想包括\x
在輸出中,你需要逃避\
與\\
:
sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i);
我寧願認爲他希望第5個字節是0..10 ... – glglgl
假如你不希望從字面上\x00
.. \x0A
,但相應的字節,你需要
sprintf(s1, "DTLK%c\xFF\xFF\xFF\xFF\xFF\xFF",i);
同時插入會在錯誤的抽象層次...
如果OTOH你真的想要十六進制字符而不是帶有命名hey cahracters的字節作爲它們的表示,其他答案可能會更有幫助。
sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i);
// ^------- Here
根據您希望達到的輸出,您可能還需要轉義剩餘的斜槓。
目前,片段會產生一個由6個字符組成的序列,其代碼爲0xFF
。如果這是你想要的,你的代碼片段是完整的。如果你想看到的\xFF
文字序列,即貌似\x5\xFF\xFF\xFF\xFF\xFF\xFF
時i == 5
,你需要逃避所有斜槓字符串中的字符串:
sprintf(s1"DTLK\\x%x\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF",i);
// ^^^^^^^
最後,如果您想格式化爲一個值即使值小於16也是兩位十六進制代碼,請使用%02x
格式代碼告訴sprintf
您需要前導零。
我寧願以另一種方式想:'\ xFF'應該展開到'0xFF'的值,而在'DTLK'之後,他想要一個變量值... – glglgl
@glglgl這很難說,但是,這是我認爲OP會特別要求十六進制值的唯一原因。 – dasblinkenlight
有些人將自己的角色與他們的表現混爲一談;這就是爲什麼我認爲相反。因人而異。 – glglgl