dポイントプレゼントキャンペーン実施中!

 文字列の中にヘキサ表現で書き込もうとしましたが、思ったように行きません。
 私の解釈がまちがえているのでしょうか。

"123\x00456"
 \x00 の部分がヘキサになると思ったのですが、\x004 の部分がヘキサになって 0x04 になります。すなわち "123" 0x04 "56" です。

試しに "123\0x00456" とすると、\0 の部分が 0x00 となります。
すなわち "123" 0x00 "x00456" です。

A 回答 (3件)

JISの規格書を見てみましたが、8進数字の時は1-3桁となっていますが、16進数字の時は桁数の上限がないですね(16進文字と解釈可能な文字が続く限り)。



ということは、"123\x00456" は、\x00456 を16進表記と解釈するのが正しそうです。
gcc だと「16 進エスケープシーケンスが範囲外です」という警告を出した上で、"123" 0x56 と解釈されますね。

希望の文字列を表記するのは、
"123\x00" "456"
ですね。(自動的に連結されます)
    • good
    • 0
この回答へのお礼

 早速の回答有り難う御座います。
 非常に参考になりました。
 元々の目的は "123" "456" と書いて、3の後ろにヌルコードを入れたかったのです。

お礼日時:2009/11/07 09:47

こんなサンプルでも、何かの参考になるでしょうか。



#include <stdio.h>

int main(void)
{
char str[8];
int i;

sprintf(str, "123%c456", '\0');
for (i = 0; i < sizeof(str); ++i) {
printf("%02x ", str[i]);
}
return 0;
}
    • good
    • 0
この回答へのお礼

 回答有り難う御座います。

 以前にお礼の返事を書いたのですが、送信ぼたんを押し忘れたようです。
済みません。

 %02x の書式の意味が分からなかったのですが、調べて勉強になりました。
 有り難う御座いました。

お礼日時:2009/11/22 11:47

#1 でいわれる通り, "123\x00" "456" と書くくらいしかないです. もちろん "123\0" "456" でもいいし 0 の数はどれだけ増やしても (ISO的には) 問題ありません.


「16進じゃなくて 8進でもいい」なら "123\000456" で OK.
    • good
    • 0
この回答へのお礼

 いつも回答有り難うございます。

 ヘキサ表現の方法は書いてあっても、その後にヘキサとも解釈出来る文字が続く場合の注意が見当たらないですね。

お礼日時:2009/11/07 12:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!