C 如何使用sprintf在字符串中包含十六进制值

C 如何使用sprintf在字符串中包含十六进制值,c,hex,printf,C,Hex,Printf,我想在c中包含i十六进制格式的值 for(i=0;i<10;i++) sprintf(s1"DTLK\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i); 对于(i=0;i您需要将\x前面的斜杠转义: sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i); // ^------- Here sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i); //

我想在c中包含i十六进制格式的值

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

对于(i=0;i您需要将
\x
前面的斜杠转义:

sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i);
//              ^------- Here
sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i);
//              ^------- Here
根据您想要实现的输出,您可能还需要避开剩余的斜杠

当前,代码段生成一个包含六个字符的序列,其代码为
0xFF
。如果这是您想要的,那么您的代码片段就完成了。如果您希望看到
\xFF
文本的序列,即当
i==5
时看起来像
\x5\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF
的字符串,则需要转义所有斜杠在字符串中:

sprintf(s1"DTLK\\x%x\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF",i);
//              ^    ^    ^    ^    ^    ^    ^
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);

假设您不希望实际拥有
\x00
\x0A
,但需要相应的字节

sprintf(s1, "DTLK%c\xFF\xFF\xFF\xFF\xFF\xFF",i);
插入
\x%x
时,将处于错误的抽象级别

如果,OTOH,你真的想用十六进制字符代替以命名的hey字符为代表的字节,其他答案可能会更有用

根据您想要实现的输出,您可能还需要避开剩余的斜杠

当前,代码段生成一个包含六个字符的序列,其代码为
0xFF
。如果这是您想要的,那么您的代码片段就完成了。如果您希望看到
\xFF
文本的序列,即当
i==5
时看起来像
\x5\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF
的字符串,则需要转义所有斜杠在字符串中:

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

//              ^    ^    ^    ^    ^    ^    ^

最后,如果您希望在值小于16时将值格式化为两位十六进制代码,请使用
%02x
格式代码告诉
sprintf
,您需要一个前导零。

我认为他需要另一种方式:
\xFF
应该在
DTLK
之后扩展到值
0xFF
想要一个可变值…@glglglgl很难说清楚,但这是我认为OP会特别要求十六进制值的唯一原因。有些人会将字符本身与它们的表示混淆;这就是我认为相反的原因。YMMV。