我想在c中包含i hex格式的值。
for(i=0;i<10;i++)
sprintf(s1"DTLK\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i);
但上面的代码输出错误:\ x使用时没有后续的十六进制数字
请任何人建议我一个正确的方式......
答案 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
您想要前导零。