5

我想在 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

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

4

4 回答 4

2

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

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

而插入\x%x将处于错误的抽象级别......

如果,OTOH,您真的想从字面上使用十六进制字符而不是具有命名 hey 字符的字节作为它们的表示形式,那么其他答案可能会更有帮助。

于 2012-10-16T10:44:14.613 回答
1

您需要转义前面的斜线\x

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

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

目前,该代码段生成一个包含六个字符的序列,其中包含 code 0xFF。如果这是您想要的,那么您的代码片段就完成了。如果您想查看一系列\xFF文字,即看起来像\x5\xFF\xFF\xFF\xFF\xFF\xFFwhen的字符串i == 5,您需要转义字符串中的所有斜杠:

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

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

于 2012-10-16T10:40:01.477 回答
0

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

如果要包含\x在输出中,则需要使用以下命令进行\转义\\

sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i);
于 2012-10-16T10:40:36.830 回答
0
sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i);
//              ^------- Here

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

目前,该代码段生成一个包含六个字符的序列,其中包含 code 0xFF。如果这是您想要的,那么您的代码片段就完成了。如果您想查看一系列\xFF文字,即看起来像\x5\xFF\xFF\xFF\xFF\xFF\xFFwhen的字符串i == 5,您需要转义字符串中的所有斜杠:

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

//              ^    ^    ^    ^    ^    ^    ^

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

于 2012-12-26T08:46:17.600 回答