文字列のバイト数を取得する (LenB)
スポンサーリンク
旧システムなどの外部連携のために、テーブルに格納するデータにバイト制限をかける場合があります。良くあるのが、半角を 1 バイト、全角を 2 バイトでカウントして規定の長さに収めるなどです。
System.String クラスの Length プロパティでは文字数しか取得できません。というよりは、半角または全角という概念は消滅しつつあります。(Unicode や UTF-8 の文字コードを参照)
VB6 では LenB という関数で、バイト数を取得できました。StrConv 関数などの合わせ技で文字コードを変えてから、使用していました。
半角は 1 バイト、全角は 2 バイトという考えは、Shift_JIS という文字コードの考えです。つまりは、Shift_JIS にエンコードしてやれば、半角 1 バイト、全角 2 バイトでのバイト数が取得できます。
System.Text.Encoding クラスから GetEncoding メソッドを実行し、ここで Shift_JIS の Encoding のインスタンスを取得します。そのインスタンスから、GetByteCount メソッドを使用することで、Shift_JIS でのバイト数を求めることができます。
サンプルコード
以下にサンプルコードを示します。
C# 全般
using System; /// ----------------------------------------------------------------------------- /// <summary> /// Microsoft.VisualBasic.Strings をカバーした静的クラスです。 /// <summary> /// ----------------------------------------------------------------------------- public class VBStrings { #region LenB メソッド /// ----------------------------------------------------------------------------------------- /// <summary> /// 半角 1 バイト、全角 2 バイトとして、指定された文字列のバイト数を返します。</summary> /// <param name="stTarget"> /// バイト数取得の対象となる文字列。</param> /// <returns> /// 半角 1 バイト、全角 2 バイトでカウントされたバイト数。</returns> /// ----------------------------------------------------------------------------------------- public static int LenB(string stTarget) { return System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(stTarget); } #endregion }
使用例は以下のようになります。
C# 全般
// 半角 1 バイト、全角 1 バイトでのバイト数を取得する int iByteCount = VBStrings.LenB("123ABC"); // 取得したバイト数を表示する MessageBox.Show(iByteCount.ToString()); //9
関連するリファレンス
準備中です。