2012-10-16 22 views

回答

1

您需要在逃避斜线在\x的面前:

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

根据您想达到什么样的输出,你可能需要逃避剩余的斜线为好。

目前,片段会产生一个由6个字符组成的序列,其代码为0xFF。如果这是你想要的,你的代码片段是完整的。如果你想看到的\xFF文字序列,即貌似\x5\xFF\xFF\xFF\xFF\xFF\xFFi == 5,你需要逃避所有斜杠字符串中的字符串:

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

最后,如果您想格式化为一个值两位十六进制代码,即使值小于十六,使用%02x格式代码告诉sprintf您想要一个前导零。

+0

我宁愿以另一种方式想:'\ xFF'应该展开到'0xFF'的值,而在'DTLK'之后,他想要一个变量值... – glglgl

+0

@glglgl这很难说,但是,这是我认为OP会特别要求十六进制值的唯一原因。 – dasblinkenlight

+0

有些人将自己的角色与他们的表现混为一谈;这就是为什么我认为相反。因人而异。 – glglgl

0

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

如果你想包括\x在输出中,你需要逃避\\\

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

我宁愿认为他希望第5个字节是0..10 ... – glglgl

0

假如你不希望从字面上\x00 .. \x0A,但相应的字节,你需要

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

同时插入​​会在错误的抽象层次...

如果OTOH你真的想要十六进制字符而不是带有命名hey cahracters的字节作为它们的表示,其他答案可能会更有帮助。

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

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

目前,片段会产生一个由6个字符组成的序列,其代码为0xFF。如果这是你想要的,你的代码片段是完整的。如果你想看到的\xFF文字序列,即貌似\x5\xFF\xFF\xFF\xFF\xFF\xFFi == 5,你需要逃避所有斜杠字符串中的字符串:

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

//   ^^^^^^^

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

相关问题