我想在 c 中包含 i 十六进制格式的值。
for(i=0;i<10;i++)
sprintf(s1"DTLK\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i);
但上面的代码输出错误:\x used with no following hex digits
请任何人建议我一个正确的方法....
假设您不想真正拥有\x00
.. \x0A
,而是相应的字节,您需要
sprintf(s1, "DTLK%c\xFF\xFF\xFF\xFF\xFF\xFF",i);
而插入\x%x
将处于错误的抽象级别......
如果,OTOH,您真的想从字面上使用十六进制字符而不是具有命名 hey 字符的字节作为它们的表示形式,那么其他答案可能会更有帮助。
您需要转义前面的斜线\x
:
sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i);
// ^------- Here
根据您想要实现的输出,您可能还需要转义剩余的斜线。
目前,该代码段生成一个包含六个字符的序列,其中包含 code 0xFF
。如果这是您想要的,那么您的代码片段就完成了。如果您想查看一系列\xFF
文字,即看起来像\x5\xFF\xFF\xFF\xFF\xFF\xFF
when的字符串i == 5
,您需要转义字符串中的所有斜杠:
sprintf(s1"DTLK\\x%x\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF",i);
// ^ ^ ^ ^ ^ ^ ^
最后,如果您希望将值格式化为两位数的十六进制代码,即使该值小于 16,请使用%02x
格式代码来告诉sprintf
您需要前导零。
\x
需要一个十六进制值,如\xC9
.
如果要包含\x
在输出中,则需要使用以下命令进行\
转义\\
:
sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i);
sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i);
// ^------- Here
根据您想要实现的输出,您可能还需要转义剩余的斜线。
目前,该代码段生成一个包含六个字符的序列,其中包含 code 0xFF
。如果这是您想要的,那么您的代码片段就完成了。如果您想查看一系列\xFF
文字,即看起来像\x5\xFF\xFF\xFF\xFF\xFF\xFF
when的字符串i == 5
,您需要转义字符串中的所有斜杠:
sprintf(s1"DTLK\\x%x\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF",i);
// ^ ^ ^ ^ ^ ^ ^
最后,如果您希望将值格式化为两位十六进制代码,即使该值小于 16,请使用%02x
格式代码来告诉sprintf
您需要前导零。