5

i 16 進形式の値を c に含めたい。

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

Plsは誰かが私に適切な方法を提案します....

4

4 に答える 4

2

\x00文字通り..を持ちたくない\x0Aが、対応するバイトが必要だとすると、

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

挿入中\x%xは間違った抽象化レベルになります...

OTOHで、名前付きのhey文字を表現するバイトではなく、文字通り16進文字を使用したい場合は、他の回答の方が役立つ場合があります。

于 2012-10-16T10:44:14.613 に答える
1

の前のスラッシュをエスケープする必要があります\x:

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

達成したい出力によっては、残りのスラッシュもエスケープする必要がある場合があります。

現在、スニペットは code を含む 6 文字のシーケンスを生成します0xFF。これでよければ、コード フラグメントは完成です。\xFFリテラルのシーケンス、つまり when のような文字列を見たい\x5\xFF\xFF\xFF\xFF\xFF\xFF場合i == 5は、文字列内のすべてのスラッシュをエスケープする必要があります。

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

最後に、値が 16 未満の場合でも値を 2 桁の 16 進数コードとしてフォーマットする場合は、%02xフォーマット コードを使用sprintfして先行ゼロが必要であることを伝えます。

于 2012-10-16T10:40:01.477 に答える
0

\xのような 16 進値が必要\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 を含む 6 文字のシーケンスを生成します0xFF。これでよければ、コード フラグメントは完成です。\xFFリテラルのシーケンス、つまり when のような文字列を見たい\x5\xFF\xFF\xFF\xFF\xFF\xFF場合i == 5は、文字列内のすべてのスラッシュをエスケープする必要があります。

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

//              ^    ^    ^    ^    ^    ^    ^

最後に、値が 16 未満であっても、値を 2 桁の 16 進数コードとしてフォーマットする場合は、%02xフォーマット コードを使用しsprintfて、先行ゼロが必要であることを伝えます。

于 2012-12-26T08:46:17.600 に答える