• ベストアンサー

文字のバイト数を数えるには

なんか一日一問になってしまったのですが、、 よろしくお願いします。 wchar_t 型に入っている文字のバイト数を数えるにはどうしたら良いでしょうか? L"あいう123" のような文字の場合UNICODEの場合12バイトですが、 全角半角区別して9バイトを求めたいです。 UNICODE環境では不可能でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

一度sjisやeucに変換する必要があります。 windowsの場合ですが http://www.doumo.jp/postgretips/tips.jsp?tips=67 wchar_t wbuf[1024]; char buf[1024]; int buflen; lstrcpyW(wbuf,L"あいう123"); buflen = WideCharToMultiByte(CP_ACP,0,wbuf,-1,buf,0,NULL,NULL); WideCharToMultiByte(CP_ACP,0,(LPCWSTR)wbuf,-1,buf,buflen,NULL,NULL); int answer = strlen(buf);

milkoX
質問者

お礼

ご回答ありがとうございます。 お~こんな方法はあったとは! ありがとうございました。 ヒロシです。 ヒロシです。。 ヒロシです。。。

関連するQ&A

  • ワイド文字のバイト数が取得できず困っています。

    ワイド文字のバイト数を求めたいのですが、文字数しか取得することが出来ません。 ワイド文字のバイト数を取得する事は出来ないのでしょうか? Visual C++ 2008 Express Edhition の デバックモードで動かしています。 ****************************** wchar_t s[256]; s = L"abcあいう"; int len = wcslen(s); ******************************

  • Excelで22バイトの文字を数えたい

    Excel2002です。 VBAでセルの文字列を取得する時に全角制御文字(2バイト)を含めて22バイトの制限を考慮したいのですがその方法がわかりません。 全角文字だけなら10文字、  半角文字だけなら22文字の取得ができます。 その後の作業の都合上、22バイトを基準に条件判断したいのですが現在はその方法がわからないためLEN()で10を上限としています。LENB()でも同じ結果(文字数が返される)になります。 対象のセルには全角文字/半角文字が混在しており、全角-半角-全角-半角のような混在であれば制御文字を2回考慮する必要があります。 最悪その文字が全角か半角かの区別がつけば対応できると思います。 よい方法をご教授いただきたくお願いいたします。

  • Excelでバイト数の最大数が決まったデータを作りたいんです!

    上手く説明出来ないんですが・・。 エクセルで、項目それぞれにバイト数の最大数が決まったデータを作りたいんです。 例えば ◆職員番号・・・バイト数12(半角)         職員番号は8桁なので、その後ろに残り12バイトまでの半角パディング。 ◆氏名 ・・・ バイト数16(全角8字まで)         全角8文字以内なら、その後ろに残り8文字までの全角パディング。         全角8文字を超す氏名なら、8文字で切る。 ◆カナ ・・・ バイト数58(半角)         半角カナ文字で残りの58バイトまで半角パディング。 *これをcsvに変換します! これを文字列だけ打ち込んだら、自動で最大バイト数まで半角・全角を埋めるようにすることは出来るでしょうか? また、氏名のところのように自動で8文字までの入力しか出来なくするようにすることは出来るでしょうか? 説明が下手で申し訳ないんですが、おわかりになる方ご教授下さい。 よろしくお願いします!!

  • 半角の文字数を知るには・・・

    文字数は、length関数を使えばいいのかと思っていたのですが、どうも、半角と全角では認識が違うようなんです、どう区別して文字を数えたらいいのでしょうか・・・ 半角の文字数をしるにはどうしたらいいでしょうか? Perl初心者なので、出来るだけわかりやすく教えて頂きたいです。お願いします。

    • ベストアンサー
    • Perl
  • 文字数について

    1.教えてgoo!で質問を投稿する場合、800字までですが、 書いた文章が何文字か調べたいんですが、 どうやって調べたらいいのですか? 全角は2バイト、半角が1バイトらしいですが。 2.漢字の場合は何文字になるんですか? 変換前の文字数ですか? 例えば、漢字なら3文字、6バイトですか それとも4バイトですか? 3.話は変わりますが、 質問内容が800字って足りないことないですか?

  • unicodeと2バイト文字

    文字コードにすごいうとい者なのですが、見慣れない _tmain なんていうものを見てしまって、少し調べてみました。 そうすると、なんだか2バイトでは世界中の文字はもとより、感じすらすべて表すことは不可能で、今のunicode主流は3バイトで表現するのだとか。 で、私の知識の中では、C言語ではwchar_tでunicodeを表現しているらしいのですが、それじゃあ足りないわけで、ちゃんとした3バイト文字を表現するための公式的?な記述方法は(WIN32 APIで)あるのでしょうか。(その他MFCなどでもあれば。) 本人こういう事柄について、今まで考えたこともなく、よくわからないまま質問しているので、どうぞ怒らないでください。 よろしくおねがいします。

  • Vbscript Unicode文字の判定

    今、テキストファイルがあり、その中には「Unicode文字」が含まれています。 タックシール(ダイレクトメール用)に出力するのに、マンション名やビル名は改行しなければなりません。 1行に印字できる文字数は全角で20文字(40バイト)です。 したがって、「住所1」と「住所2(マンションやビル名)」の正確なバイト数を調べるのですが、今、「Unicode」のテキストファイルを作って、確かめたところ、半角文字は、そのまま「Asc()」で正の整数で返ってきます。 また、通常の2バイト文字(全角スペースから外字の最終文字)までは、負の整数で返ってきました。 しかし、「Unicode」文字は、常に「63」で返ってきます。 Character Code「63」は、半角の「?」です。 どうやら、「VBScript」は「Unicode」文字をすべて「?」として認識してしまうようです。 通常は、住所に「?」はないはずなのですが、最近、お客様のデータを見ていると、半角の「-」が、よく、半角の「?」に化けているので、「?」はちゃんと1バイトとして、Unicodeの文字は2バイトとして調べなければなりません。 VBAのように「Len()」と「LenB()」があれば、問題ないのですが、「VBScript」では、正しく動作しません(すべて「2」と返してきます)。 正確に文字数(バイト数)を調べるには、どうすればよいのでしょうか?

  • エクセル:文字列のバイト数が欲しい

    セルB1に、  半角スペース、全角2文字、半角スペース、 と入力しました。 このシートの別のセルに、 =Len(B1)と入力すると4と表示され、 =LenB(B1)と入力すると6と表示されますので、 間違いなく「半角スペース・全角2文字・半角スペース」がB1に入っているはずです。 このシートのコードに、 Private Sub Worksheet_Change(ByVal Target As Range)   If Target.Address = "$L$1" Then     MsgBox LenB(Cells(1, 2).Value)   End If End Sub と打ちました。 ここでシート上のセルL1に何か入力するとメッセージボックスが出るのですが、 メッセージボックスに出る値は8です。 何が原因でしょうか。 6が表示されて欲しいのですが(文字列のバイト数が欲しい)、 どのようにコードを書けばよいでしょうか。 実際にB1に入れていた文字は、 1B です。 (半角スペース・全角数字1・全角英字B・半角スペース)

  • バイト数

    こんにちわ。 VB6でのすごく初歩的な質問なんですが、テキストボックスの中の文字のバイト数をLenB関数で取得して表示させようとしたのですが、半角も全角も1文字2バイトとでてしまいますがなぜでしょうか? お暇なときで結構ですのでどなたか回答をおねがいします。

  • ワイド文字列とコンストラクタ

    ワイド文字列(UNICODE)をクラス化しようとしているのですが、 コンストラクタにconst wchar_t*型の引数を持たせて呼び出すと、 コンストラクタに渡された文字列が消えてしまい、wcslen()でサイズを求めると何故かサイズも0になっています。 class WideString { public: WideString(const wchar_t*); … }; WideString::WideString(const wchar_t* ws) { ::OutputDebugString(ws); // ←文字列が消えてる?表示されない int len = wcslen(ws); // ←これが0 } int main(void) { WideString wStr(L"文字列"); … } これは一体どういうことなのでしょうか。どなたか教えてください。

専門家に質問してみよう