2007年12月19日水曜日

C++2005 大文字混在文字列のバイト数を求める方法

文字数を求めたいのなら、以下に示すように簡単です。
int len = timedate->Length;

しかし、バイト数を求めるメソッドがありません。

以下の例では、test.txt に文字列を書込む処理ですが、
Write()の第1引数は、arrayなので、大文字・小文字が混在した文字列の場合、
文字数=バイト数とはならないので書込文字数が少なくなるときがあるため、バイト数を求める必要があるのです。


FileStream textfile( test.txt , FileMode::Append); // 追記モードでファイルを開く

System::String^ moji = "私(A)は何バイトだと思います?";

char pbuf[1024];
sprintf_s( pbuf , sizeof(pbuf) , "%s" , moji ); // char型変換

array ^ar = gcnew array(1024);
pin_ptr str = &ar[0];

System::Text::Encoding ^sjisEnc = System::Text::Encoding::GetEncoding("Shift_JIS");
int len = sjisEnc->GetByteCount( moji ); // バイト数取得

for(int ii=0 ; ii<len ; ii++ ){
str[ii] = pbuf[ii];
}
textfile.Write( ar , 0 , len ); // ファイルに書込み

0 件のコメント: