• ベストアンサー

C#.NETでバイト数が数えられない!!

こんにちは。現在C#.NETで開発を行っております。 そこでの通信方法が決まったバイト数で区切られた 文字を送受信してるのですが、困ったことにC#.NET をはじめ、.NETでは文字数はカウントできてもバイト 数はカウントできないらしいです。.NET初心者の私は いま行き詰ってしまいました。 現在の状況はこのようになっています。 例えば、Aという項目が2バイト、Bという項目が4バイト Cという項目が3バイトの全部で9バイトと決まっているとします。次の 「AABBBBCCC」というように、全部半角であればSubString(0,2) 、SubString(2,4),SubString(6,3)というようにして、取得できる のですが、「あいイイうウ」というような文字列だと同じ9バイトでも .NETだと文字数でしかとれないのでめちゃくちゃなものになってし まいます。なにかよいアイデアはないでしょうか?? 納期も迫っているので大変困っています。

noname#246722
noname#246722

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

  • ベストアンサー
  • herencia
  • ベストアンサー率56% (120/211)
回答No.1

.NETでもバイト数を取得できます。 http://www.atmarkit.co.jp/fdotnet/dotnettips/012strcount/strcount.html 文字列の全角/半角をチェックするには? http://www.atmarkit.co.jp/fdotnet/dotnettips/014strcheck/strcheck.html も参考になるかもしれません。 .NETでの文字列処理は下記にたくさん載ってます。 http://www.atmarkit.co.jp/fdotnet/dotnettips/index/index.html

その他の回答 (1)

  • UKY
  • ベストアンサー率50% (604/1207)
回答No.2

そもそも .NET では (Java などでもそうですが) 「バイト列 (byte[])」と「文字列 (string または char[])」は異なるものとして明確に区別します。 なので、扱っているデータがバイト列なのか文字列なのかを常に意識しながらプログラムを構成しなくてはなりません。 今回の質問のプログラムではバイト列を送受信しているわけですから、それをいきなり文字列として扱っている点に誤りがあります。

関連するQ&A

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

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

  • Javaで、半角カナを2バイトとしてカウントしたい

    JavaでSJISで入力された文字列(全角、半角、英字、記号等混在)の桁数チェックで、 入力された半角カナのバイト数を、2バイトとみなしてカウントしたいと考えています。 例えば  全角の"テスト"の場合、バイト数は6  半角の"テスト"の場合も、バイト数は6 Javaで以下の様にコーディングしたところ、半角カナ部分はとりあえずうまく行ったのですが、 System.out.println 半角の"テスト".getBytes("EUC-JP").length; ->6 特殊な文字「まるの1、まるの2」等で試すと、特殊な文字のバイト数が1バイトとして カウントされてしまいます。 ※まるの1、まるの2は、この質問フォームで入力できないのでこの記載としています。 以降は(1),(2)と記載します。いずれも全角1文字の文字のことです。 System.out.println "(1)".getBytes("EUC-JP").length;   ->1      ※希望結果は2バイト System.out.println "(2)スト".getBytes("EUC-JP").length;   ->5      ※希望結果は6バイト 特殊な文字「(1)、(2)」や半角カナ(2バイトとしてカウント)を含めて、 簡単にバイト数をカウントすることはできないでしょうか。

  • バイト数

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

  • Javaで日本語1文字のバイト数

    Javaで日本語1文字のバイト数はいくつになるのでしょうか。 単純に2バイトではないような書き込みを見たことがあるのですが本当でしょうか。 2バイト以外は特殊な文字で「あいうえお山川」のような通常使う文字が2バイト ということでしょうか。 また、C言語(C#も含む?)であれば全角は2バイト、半角は1バイトで計算できると いうのは本当でしょうか。

    • ベストアンサー
    • Java
  • 文字のバイト数を数えるには

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

  • varchar(M)のMは文字数ですかバイト数ですか?

    os:ターボlinuxです。 varchar属性にvarchar(10)と指定すると10文字入ると思っていたのですが、全角で入力すると5文字、半角で10文字でした。 マニュアル6.2のカラム型によると、 M の範囲は 0 〜 255 文字とあります。 TINYBLOB , TINYTEXT は最大長が 255(2^8 - 1)文字 BLOB , TEXTは 最大長が 65535(2^16 - 1)文字 MEDIUMBLOB , MEDIUMTEXTは 最大長が 16777215(2^24 - 1)文字 そして LONGBLOB , LONGTEXT は最大長が 4294967295 または 4G(2^32 - 1)バイト となっています。 LONGだけが「バイト」という表現、それ以外はvarcharも含めて文字数という表現なので、当然文字数でカウントしていると思っていたので完全に計算が狂いました。 これはマニュアルが間違えているのでしょうか? それとも、文字コードによって変わるのでしょうか? その場合、どの文字コードがバイト換算でどの文字コードが文字数換算なのでしょうか? また、MySQLでどの文字コードが使用されているかどこを見れば分かるのですか? となたかご教授下さい。

    • ベストアンサー
    • MySQL
  • PPT ファイルの文字カウント=全角文字の数

    PPT ファイルの文字数をカウントしたいと思っています。 今のところ、ひたすら Ctrl+A でコピーして1シートずつ Word 文書に貼り付けてカウントしています・・・。 以前にこちらで、PPT ファイルの総文字数をカウントするマクロは紹介されていたのですが、全角文字数と半角文字数を区別してカウントすることって、できないのでしょうか? ネットでもいろいろ調べてみたのですが、調べ方が悪いのか、さっぱり。。。 すみませんが、よろしくお願いします。

  • excelで文字数をスペースを除いてカウント

    シート内に入力した文字数をカウントしたいのですが、 1つのセルに『木村 拓哉』のように姓名の間に半角スペースが 入っています。この半角スペースを無視して文字数をカウントするには どのような関数が適していますか? LEN関数を使うと、スペースも1文字としてカウントされてしまいます。 宜しくお願い致します。

  • 文字のバイト数について

    現在VBの勉強をしております(WindowsXP、VB6.0) テキストボックスの文字数(バイト)チェックを行っていて、不思議に思った事があるので質問させてください。 C言語では、数字の「1」は1バイトなのに、VBのLenBで取得すると、2バイトです。 これって何ででしょうか? 文字コードが違うからでしょうか? 以上、よろしくお願いいたします。

  • 見えないバイト数

    見えないバイト数がいます。 何か原因わかりませんでしょうか? とあるプログラムから取得した文字列を print関数を使ってブラウザに出力しました。  print "$AAAA"; この出力された文字列をブラウザからコピーし、 同一プログラム内に$BBBBという変数で定義します。  $BBBB = "コピーしてきた文字列"; ここで$AAAAと$BBBBは同じもののはずなのですが、 if 関数で比較するとなぜかFALSEが返ります・・・。  if($AAAA == $BBBB){   print "AAAAとBBBBは同じです。"; //←こっちが出力されてほしい  } else {   print "AAAAとBBBBは違います。"; //←こっちが出力される  } 文字列のバイト数を調べる「strlen」関数を使用すると、 AAAAが69バイト、BBBBが61バイトと 8バイトの差があります。 どちらを(printで)出力しても目には見えないので 困っております・・・。 なにか心当たり、解決策をご存じの方いらっしゃいませんでしょうか?? ちなみにAAAAとBBBBは、 半角英数+記号(&%/?)で構成されています。

    • ベストアンサー
    • PHP

専門家に質問してみよう