AIで楽曲を楽器やボーカルに分離する
Miku-nical「みくにかる」〜Program館〜
Miku-nical「みくにかる」
Miku-nical「みくにかる」〜Program館
Miku-nical「みくにかる」
=SiteMenu=

図書紹介
-Books-

OSの話
-Windows/Linux-
プログラム
-Programming-
壁紙集
-Wall Paper.-
= プログラムの素「VisualBasic編」=

KnowHow集などとだいそれたものではありません
自分がプログラムをする上で得た知識などをまとめておこうと思っています

002.文字列の取り扱い

メモリ上での文字列の取り扱いには注意が必要です
例えば、

dim strBuffer as string
strBuffer = "ABCDEあいうえお"

とした場合、ここで使用している変数strBufferについてみてみると、

len(strBuffer) -> 10 (*)文字数の取得
lenb(strBudder) -> 20 (*)バイト数の取得

となってしまいます。これはメモリ上ではUnicodeという形式でデータが取り扱われている為で、全ての文字が2バイトコードとして下記のように扱われているためです。そのため、下図のように1バイト文字(ここでは"ABCDE"の部分)と2バイト文字(ここでは"あいうえお")とが区別されずに、どちらも1文字が2バイトとして扱われてしまっているのです。

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20

A

B

C

D

E

このような事態を避けるには、byte型を用いる事でも対応できますが、ここでは文字列として使用する方法について考えてみましょう。
この両者を区別して、下図のような形で文字列を扱いたい場合には少し工夫が必要となります。

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15

A

B

C

D

E

strConv関数を使用すると以下のようにバイト数として15を取得する事ができるようになります

len(strConv(strBuffer,vbFromUnicode)) -> 10
lenb(strConv(strBuffer,vbFromUnicode)) -> 15

尚、ここに書かれている方法を実際に行っての問題については一切関知しませんので、各自の責任にて行って下さい
ご意見ご感想はこちらまで <mikunical@mbp.nifty.com>
--