VC++ .NETのStreamWriter()でデータ書き込み処理を作成したところ、
途中のNULL文字のところまでしかデータをコピーしません。
NULL文字を入れないでデータ書き込みを行う方法についてご教示願います。
特別問題なく書き込めましたが。
---- test.cpp ----
#using <mscorlib.dll>
using namespace System;
using namespace System::IO;
using namespace System::Text;
int main (void)
{
String __gc * s = S"テスト\0文字列";
StreamWriter __gc * sw = new StreamWriter(S"test.dat", false, Encoding::Unicode);
sw->WriteLine(s);
sw->Close();
return 0;
}
---- 実行結果 (test.dat) ----
00000000 FF FE C6 30 B9 30 C8 30-00 00 87 65 57 5B 17 52
00000010 0D 00 0A 00
ちゃんと8バイト目からの2バイトが,U+0000になっています。
単に確認方法が拙いだけなのでは?
普通に読み込んでデバッガで見ただけだと多分最初の'\0'までしか
表示されないと思います。
masat21です。
回答ありがとうございます。
こちらからいくつか質問します。
1.YuOさんへ
StreamWriterの第2引数をtrueにし、第3引数をアスキーにしてみても
同様でしょうか?
2.PATIOさんへ
ファイルに出力した後、MIFES(バイナリエディタ)で確認しました。
'\0'までしか表示されません。
以上
現在、BinaryWriter()を使用して1メンバずつファイルに書き込む処理の実装を行っています。
ところが、単体で確認したところ、例に示すようにファイルに書き出します。
(バイナリファイルの出力結果)
000000 08 42 58 58 58 31 54 20 20 04 4D 30 30 32 01 31
000010 0E 30 36 30 33 32 30 30 35 30 30 30 30 30 30
00番地、09番地、0E番地および10番地に、各メンバのサイズが格納されます。このサイズを出力しない方法についてご教示願います。
P.S.
.NETは奥が深い!
バイナリデータのコピぺってここではできないのかしら・・・。
> StreamWriterの第2引数をtrueにし、第3引数をアスキーにしてみても
> 同様でしょうか?
やってみてわかることを,何故尋ねるのでしょうか。
ちなみに,ちゃんと出力されますよ。
> 00番地、09番地、0E番地および10番地に、各メンバのサイズが格納されます。このサイズを出力しない方法についてご教示願います。
http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200506/05060042.txt
> バイナリデータのコピぺってここではできないのかしら・・・。
コピペされたところでコントロールコードは見ることができないので無意味です。
Encodingクラスでバイト配列に変換して,自分で書き込んだところ、
文字長プリフィックスを除いた状態で書き込みが無事にできました。
解決のチェック入れるのを忘れていました。
お騒がせいたしました。
ツイート | ![]() |