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は誰かが私に適切な方法を提案します....
\x00
文字通り..を持ちたくない\x0A
が、対応するバイトが必要だとすると、
sprintf(s1, "DTLK%c\xFF\xFF\xFF\xFF\xFF\xFF",i);
挿入中\x%x
は間違った抽象化レベルになります...
OTOHで、名前付きのhey文字を表現するバイトではなく、文字通り16進文字を使用したい場合は、他の回答の方が役立つ場合があります。
の前のスラッシュをエスケープする必要があります\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
して先行ゼロが必要であることを伝えます。
\x
のような 16 進値が必要\xC9
です。
出力に含めたい場合は\x
、次のようにエスケープする必要があり\
ます\\
。
sprintf(s1"DTLK\\x%x\xFF\xFF\xFF\xFF\xFF\xFF",i);
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
て、先行ゼロが必要であることを伝えます。