我想在c中包含i十六进制格式的值。如何使用sprintf在字符串中包含十六进制值
for(i=0;i<10;i++)
sprintf(s1"DTLK\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i);
,但上面的代码输出错误:\ X没有以下十六进制数字
请任何一个建议我适当的方式使用....
我想在c中包含i十六进制格式的值。如何使用sprintf在字符串中包含十六进制值
for(i=0;i<10;i++)
sprintf(s1"DTLK\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i);
,但上面的代码输出错误:\ X没有以下十六进制数字
请任何一个建议我适当的方式使用....
您需要在逃避斜线在\x
的面前:
sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i);
// ^------- Here
根据您想达到什么样的输出,你可能需要逃避剩余的斜线为好。
目前,片段会产生一个由6个字符组成的序列,其代码为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
您想要一个前导零。
\x
需要十六进制值,如\xC9
。
如果你想包括\x
在输出中,你需要逃避\
与\\
:
sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i);
我宁愿认为他希望第5个字节是0..10 ... – glglgl
假如你不希望从字面上\x00
.. \x0A
,但相应的字节,你需要
sprintf(s1, "DTLK%c\xFF\xFF\xFF\xFF\xFF\xFF",i);
同时插入会在错误的抽象层次...
如果OTOH你真的想要十六进制字符而不是带有命名hey cahracters的字节作为它们的表示,其他答案可能会更有帮助。
sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i);
// ^------- Here
根据您希望达到的输出,您可能还需要转义剩余的斜杠。
目前,片段会产生一个由6个字符组成的序列,其代码为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
您需要前导零。
我宁愿以另一种方式想:'\ xFF'应该展开到'0xFF'的值,而在'DTLK'之后,他想要一个变量值... – glglgl
@glglgl这很难说,但是,这是我认为OP会特别要求十六进制值的唯一原因。 – dasblinkenlight
有些人将自己的角色与他们的表现混为一谈;这就是为什么我认为相反。因人而异。 – glglgl