• ベストアンサー

文字のバイト数について

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

  • ya-cha
  • お礼率68% (184/268)

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

  • ベストアンサー
  • noah7150
  • ベストアンサー率46% (116/251)
回答No.2

そうなんですね UNICODEで扱われているんです 参考URLにもあるようにバイト数を求めるには一度ShiftJISに変換かけないと求められなくなってます 極力、OSや開発アプリの共通化が出来るようにとの配慮だと思いますが・・・ ちなみにSQL ServerもUNICODEで保存する文字型を推奨しているようです。 時代の変化と共に記憶媒体も安くなりましたから保存領域節約なんて時代遅れなのかもしれません。 なら、画面も半角を無くせと言いたいが・・・

参考URL:
http://oshiete1.goo.ne.jp/qa786809.html
ya-cha
質問者

お礼

ご回答ありがとうございました。 また、URLはとても参考になりました。 本当にありがとうございますm(__)m

その他の回答 (4)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.5

>ただ、イミディエイトウィンドウって、入力出来るのでしょうか? やってみた? やったんなら、できたか、できないか、ですよね。 「イミディエイト」の意味を考えましょう。 因みにイミディエイトウィンドウの出し方は Ctrl + U です。

ya-cha
質問者

お礼

入力出来ませんでした。 また、イミディエイトウィンドウっの出し方はCtrl+Gです。 バージョン等で回答者様とは異なるようですね(>_<) とりあえず質問した内容に関しては解決出来たので、締め切ってしまいたいと思います。 何度もご丁寧にありがとうございましたm(__)m

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.4

普通の関数のように使います。 Declare ~ はGeneralの所(特定のプロシージャに属さない)で定義 使用例 Sub Main() Dim SSS As String Dim LLL As Long SSS = "Ab漢字-*" LLL = lstrlen(SSS) MsgBox """" & SSS & """は" & CStr(LLL) & "バイトです" End Sub また、いきなりイミディエイトウィンドウでも使えます。 以下のコマンドを入力してみてください。 ? lstrlen("Ab漢字-*")

ya-cha
質問者

お礼

ご回答ありがとうございます。 参考にさせていただきますm(__)m ただ、イミディエイトウィンドウって、入力出来るのでしょうか? またまた質問になってしまって申し訳ありません(>_<)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

理由は皆さんの回答のようにUniCodeだからです。 ANSI文字列として半角=1、全角=2として数える場合は私はAPIを 使っています。 Declare Function lstrlen Lib "KERNEL32" Alias "lstrlenA" _   (ByVal T As String) As Long

ya-cha
質問者

お礼

ご回答ありがとうございます。 >ANSI文字列として半角=1、全角=2として数える場合は私はAPIを >使っています。 サンプルコードも記載していただきありがとうございます。 ただ、どう利用して良いのか分かりません(^_^;) 直接コードを記述するのでしょうか? また、外部プロシージャって、どうやって探せば良いのか分からないのですが、機能一覧等がどこかにあるのでしょうか?

  • boro-pc
  • ベストアンサー率30% (64/208)
回答No.1

ほぼ自己完結してるみたいですけど一応 >これって何ででしょうか? >文字コードが違うからでしょうか? そうですね たぶんVBはUnicodeになってるからでしょう 1バイトにしたいならStrConvで変換してあげれば良いでしょう

ya-cha
質問者

お礼

ご回答ありがとうございます。 >たぶんVBはUnicodeになってるからでしょう >1バイトにしたいならStrConvで変換してあげれば良いでしょう ありがとうございます。参考にさせていただきますm(__)m

関連するQ&A

  • バイト数

    こんにちわ。 VB6でのすごく初歩的な質問なんですが、テキストボックスの中の文字のバイト数をLenB関数で取得して表示させようとしたのですが、半角も全角も1文字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・半角スペース)

  • テキストボックスに入力されているバイト数

    テキストボックスに入力されているバイト数(文字数ではない)を取得するにはどうしたらいいのでしょうか?

  • 入力文字のバイト数

    いつも参考にしております。 入力文字のバイト数のカウントについて質問をさせていただきます。 入力フォームなどで、入力文字数の制限をしたいと考えております。 文字を入力するたびに、バイト数がテキストボックスに常に 表示されるようにしたいと考えております。 以下を参考にできるのではないとか思っておりますが。 <script language="javascript"> <!-- function check() {  txt = document.myFORM.myTEXT.value;  n = txt.length;  if (n > 10) alert("10文字以内にしてください"); } --> </script> <form name="myFORM"> <textarea rows="3" name="myTEXT" onChange="check()"></textarea> </form> ご教授お願いいたします。

  • [VBScript]バイト長の判定

    テキストのバイト長を取得したく「LenB関数」を使用したのですが、Unicodeの為、半角も全角も全て2バイトでカウントされてしまいます。 「StrConv関数」もVBScriptにはないため、どうしたものかと困っています。 一文字ずつコード値を出して、1バイトか2バイトに振り分けるという処理は、データの量からして現実的ではありません。 なにかよい方法がありましたらおしえてください。 よろしくお願いします。

  • 文字列の中に2バイトが含まれているか調べたい

    文字列の中に、2バイト(つまり全角)が含まれているかどうかを調べたいです。 VBなどでは、LenB(StrConv(Value, vbFromUnicode))とかで、調べられるのですが、Pealではどのような関数を用いれば良いでしょうか・ 最適な関数、あるいは手法があれば、教えてくださいませ。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 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
  • 文字列のバイト数を取得したい

    処理中に渡ってくる文字列のバイト数を取得したいのですが、 そういった関数はありませんでしょうか? 探しても見つかりませんでした。 文字列はUTF-8かSJISで渡ってきますので、両方に 対応していると嬉しいです。 対応していなければ渡ってくる前に文字コードを 変換します。 どなたかご教示下さい。

    • ベストアンサー
    • PHP
  • バイト配列のバイト数の設定方法を教えてください

    下のようなコードでWebページのソースを取得して、 そのページのコードを解析して、文字化けのない正常な状態で 変数にソースコードを代入するプログラムなのですが、 バイト配列に代入するためのバイト配列の配列数ですが、 5000などとするとページの途中まで正常に取得できるのですが、 多めにと思って50000とかとすると文字化けしてしまいます。 多すぎるとだめなようなのですが、これをぴったりの数値で設定するには ページのバイト数はどのように取得したら良いでしょうか? 下のコードのGetCode(bs)というのは http://dobon.net/vb/dotnet/string/detectcode.html のページにあるコード解析関数の呼び出しの部分です。 Dim txt As String = "http://www.yahoo.co.jp" Dim wc As New System.Net.WebClient Dim fs As System.IO.Stream = wc.OpenRead(txt) Dim bs(5000) As Byte 'byte配列に読み込む fs.Read(bs, 0, bs.Length) fs.Close() '文字コードを取得する Dim enc As System.Text.Encoding = GetCode(bs) 'デコードしてtxtに代入する txt = enc.GetString(bs) よろしくお願いいたします。

  • 文字列中の任意の位置の文字取得

    VB6の勉強をしております。 OSはWindowsXPです。 すごく簡単な質問なんですが、C言語のように、文字列中の任意の位置を指定する方法はVB6には無いのでしょうか? 例) C言語:str[1] 添え字で指定出来る VB6:???  思いつく方法はMidを利用し、任意の位置の文字を取得する方法なんですが、それしか無いのでしょうか? 以上、よろしくお願いいたします。

専門家に質問してみよう