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

时间:2012-10-16 10:37:22

标签: c hex printf

我想在c中包含i hex格式的值。

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

但上面的代码输出错误:\ x使用时没有后续的十六进制数字

请任何人建议我一个正确的方式......

4 个答案:

答案 0 :(得分:1)

您需要转义\x

前面的斜线
sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i);
//              ^------- Here

根据您希望实现的输出,您可能还需要转义剩余的斜杠。

目前,该代码段会生成一个包含代码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您想要一个前导零。

答案 1 :(得分:1)

假设您不想真正拥有\x00 .. \x0A,但需要相应的字节

sprintf(s1, "DTLK%c\xFF\xFF\xFF\xFF\xFF\xFF",i);
插入\x%x时,

将处于错误的抽象级别......

如果,OTOH,你真的希望字面上有十六进制字符而不是以命名的hey字符作为其表示的字节,其他答案可能会更有帮助。

答案 2 :(得分:0)

\x需要一个十六进制值,如\xC9

如果您想在输出中加入\x,则需要使用\转义\\

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

答案 3 :(得分:0)

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

根据您希望实现的输出,您可能还需要转义剩余的斜杠。

目前,该代码段会生成一个包含代码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您想要前导零。