C#文字列のバイト数を取得する (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

関連するリファレンス

準備中です。

スポンサーリンク