怠日記

写真・金魚・昆虫・プログラミングの趣味を語るサイトです。似たようなことをnoteにも書いたり書いてなかったり。

VBScript - バイト数を取得する(シフトJIS)

シフトJISのバイト数を返す関数は VBScript にはない。
そのため、計算で求めなくてはならない。

文字列のバイト数を求めるには、文字ごとにバイト数を求め、それを合計すればよい。

文字のバイト数は、Asc 関数の戻り値と 0xFF00 の論理積から求められる。
0 なら 1 バイト、それ以外なら 2 バイトである。

↓ イメージ

If (Asc(string) And &HFF00) = 0 Then
  ' → 1バイト文字
Else
  ' → 2バイト文字
End If

例: シフトJISの文字列のバイト数を返す関数

Function GetSJISByteCount(str)

  Dim byteCount
  byteCount = 0

  Dim i
  For i = 0 To Len(str) - 1
    Dim ch
    ch = Mid(str, i + 1, 1)

    If (Asc(ch) And &HFF00) = 0 Then
      byteCount = byteCount + 1
    Else
      byteCount = byteCount + 2
    End If
  Next

  GetSJISByteCount = byteCount

End Function