- ベストアンサー
文字のバイト数について
現在VBの勉強をしております(WindowsXP、VB6.0) テキストボックスの文字数(バイト)チェックを行っていて、不思議に思った事があるので質問させてください。 C言語では、数字の「1」は1バイトなのに、VBのLenBで取得すると、2バイトです。 これって何ででしょうか? 文字コードが違うからでしょうか? 以上、よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
そうなんですね UNICODEで扱われているんです 参考URLにもあるようにバイト数を求めるには一度ShiftJISに変換かけないと求められなくなってます 極力、OSや開発アプリの共通化が出来るようにとの配慮だと思いますが・・・ ちなみにSQL ServerもUNICODEで保存する文字型を推奨しているようです。 時代の変化と共に記憶媒体も安くなりましたから保存領域節約なんて時代遅れなのかもしれません。 なら、画面も半角を無くせと言いたいが・・・
その他の回答 (4)
- nda23
- ベストアンサー率54% (777/1415)
>ただ、イミディエイトウィンドウって、入力出来るのでしょうか? やってみた? やったんなら、できたか、できないか、ですよね。 「イミディエイト」の意味を考えましょう。 因みにイミディエイトウィンドウの出し方は Ctrl + U です。
お礼
入力出来ませんでした。 また、イミディエイトウィンドウっの出し方はCtrl+Gです。 バージョン等で回答者様とは異なるようですね(>_<) とりあえず質問した内容に関しては解決出来たので、締め切ってしまいたいと思います。 何度もご丁寧にありがとうございましたm(__)m
- nda23
- ベストアンサー率54% (777/1415)
普通の関数のように使います。 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漢字-*")
お礼
ご回答ありがとうございます。 参考にさせていただきますm(__)m ただ、イミディエイトウィンドウって、入力出来るのでしょうか? またまた質問になってしまって申し訳ありません(>_<)
- nda23
- ベストアンサー率54% (777/1415)
理由は皆さんの回答のようにUniCodeだからです。 ANSI文字列として半角=1、全角=2として数える場合は私はAPIを 使っています。 Declare Function lstrlen Lib "KERNEL32" Alias "lstrlenA" _ (ByVal T As String) As Long
お礼
ご回答ありがとうございます。 >ANSI文字列として半角=1、全角=2として数える場合は私はAPIを >使っています。 サンプルコードも記載していただきありがとうございます。 ただ、どう利用して良いのか分かりません(^_^;) 直接コードを記述するのでしょうか? また、外部プロシージャって、どうやって探せば良いのか分からないのですが、機能一覧等がどこかにあるのでしょうか?
- boro-pc
- ベストアンサー率30% (64/208)
ほぼ自己完結してるみたいですけど一応 >これって何ででしょうか? >文字コードが違うからでしょうか? そうですね たぶんVBはUnicodeになってるからでしょう 1バイトにしたいならStrConvで変換してあげれば良いでしょう
お礼
ご回答ありがとうございます。 >たぶんVBはUnicodeになってるからでしょう >1バイトにしたいならStrConvで変換してあげれば良いでしょう ありがとうございます。参考にさせていただきますm(__)m
お礼
ご回答ありがとうございました。 また、URLはとても参考になりました。 本当にありがとうございますm(__)m