C 如何使用sprintf在字符串中包含十六进制值
我想在c中包含i十六进制格式的值C 如何使用sprintf在字符串中包含十六进制值,c,hex,printf,C,Hex,Printf,我想在c中包含i十六进制格式的值 for(i=0;i<10;i++) sprintf(s1"DTLK\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i); 对于(i=0;i您需要将\x前面的斜杠转义: sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i); // ^------- Here sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i); //
for(i=0;i<10;i++)
sprintf(s1"DTLK\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i);
对于(i=0;i您需要将\x
前面的斜杠转义:
sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i);
// ^------- Here
sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i);
// ^------- Here
根据您想要实现的输出,您可能还需要避开剩余的斜杠
当前,代码段生成一个包含六个字符的序列,其代码为0xFF
。如果这是您想要的,那么您的代码片段就完成了。如果您希望看到\xFF
文本的序列,即当i==5
时看起来像\x5\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF
的字符串,则需要转义所有斜杠在字符串中:
sprintf(s1"DTLK\\x%x\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF",i);
// ^ ^ ^ ^ ^ ^ ^
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);
假设您不希望实际拥有\x00
。\x0A
,但需要相应的字节
sprintf(s1, "DTLK%c\xFF\xFF\xFF\xFF\xFF\xFF",i);
插入\x%x
时,将处于错误的抽象级别
如果,OTOH,你真的想用十六进制字符代替以命名的hey字符为代表的字节,其他答案可能会更有用
根据您想要实现的输出,您可能还需要避开剩余的斜杠
当前,代码段生成一个包含六个字符的序列,其代码为0xFF
。如果这是您想要的,那么您的代码片段就完成了。如果您希望看到\xFF
文本的序列,即当i==5
时看起来像\x5\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF
的字符串,则需要转义所有斜杠在字符串中:
sprintf(s1"DTLK\\x%x\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF",i);
// ^ ^ ^ ^ ^ ^ ^
sprintf(s1"DTLK\\x%x\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF",i);
// ^ ^ ^ ^ ^ ^ ^
最后,如果您希望在值小于16时将值格式化为两位十六进制代码,请使用%02x
格式代码告诉sprintf
,您需要一个前导零。我认为他需要另一种方式:\xFF
应该在DTLK
之后扩展到值0xFF
想要一个可变值…@glglglgl很难说清楚,但这是我认为OP会特别要求十六进制值的唯一原因。有些人会将字符本身与它们的表示混淆;这就是我认为相反的原因。YMMV。