*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

<C# 4.0以降>
「メモリマップドファイルでのデーターの扱い方<文字列や配列を含めて複数のデーターのアクセス>」のコード No.5


*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

.






元のページ


元ページ「<C# 4.0以降> メモリマップドファイルでのデーターの扱い方<文字列や配列を含めて複数のデーターのアクセス>」
http://note.chiebukuro.yahoo.co.jp/detail/n170106


記述量上限の制限で、ページを分けて記述しています。





本ページの前のページ


「メモリマップドファイルでのデーターの扱い方<文字列や配列を含めて複数のデーターのアクセス>」のコード No.4
http://note.chiebukuro.yahoo.co.jp/detail/n174913

 

記述量上限の制限で、ページを分けて記述しています。











はじめに


元ページの「<C# 4.0以降> メモリマップドファイルでのデーターの扱い方<文字列や配列を含めて複数のデーターのアクセス>」におけるコードをここに記述します。








共有メモリ制御クラスのコード




using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


// <C# 4.0以降> メモリマップドファイルでのデーターの扱い方
// <文字列や配列を含めて複数のデーターのアクセス>
namespace SharedMemory4_AccessManyData
{


    // ************************************
    // 文字列用バイト型配列制御クラス
    // ************************************
    public class StringBytesController
    {

 


        //============
        // ユニコードstring ---> 指定コードバイト型配列 変換メソッド
        //
        // 内容: ユニコードの文字列を指定コード(例: シフトJISコード)のバイト型配列に変換する。
        //
        // 第1引数: 変換前の文字列を入力指定(string型のユニコードの文字列)
        // 第2引数: 変換後のエンコードを入力指定(シフトJISコード時は、"shift_jis")
        // 第3引数: 変換後の文字列を出力(byte型配列のシフトJISコードの文字列)
        //
        // 戻り値: エラー情報(0から1: 成功、2以上: 失敗)
        // _______________(1: 警告(フォールバック発生))
        //
        // エンコーディングを示すコードページ名(第2引数指定値)
        //   シフトJIS: "shift_jis"
        //   JIS: "iso-2022-jp"
        //   日本語EUC: "euc-jp"
        //   Unicode (UTF-8): "utf-8"
        public static int ChangeUnicodeStrToBinary(string UnicodeText, string AfterEncod, out byte[] AfterBytes)
        {

            // 初期化
            AfterBytes = null;
            int ErrorInfo = 0; // エラー情報


            // 入力がnull時のエラー処理
            if (UnicodeText == null || AfterEncod == null) return 2;

            // 文字コードを示すエンコードを生成
            System.Text.Encoding AfterCodeEncodObj = System.Text.Encoding.GetEncoding(AfterEncod); // 変換後エンコード
            System.Text.Encoding BeforeEncodObj = System.Text.Encoding.Unicode; // 変換前エンコード

            // ユニコード文字列をバイナリ格納用配列に設定
            byte[] UnicodeBytes = BeforeEncodObj.GetBytes(UnicodeText);

            // ユニコードを指定コードに変換
            try
            {
                AfterBytes = System.Text.Encoding.Convert(BeforeEncodObj, AfterCodeEncodObj, UnicodeBytes);
            }
            catch (DecoderFallbackException)
            {
                // フォールバックが発生
                ErrorInfo = 1;
            }
            catch (EncoderFallbackException)
            {
                // フォールバックが発生
                ErrorInfo = 1;
            }
            catch (ArgumentNullException)
            {
                // 入出力文字列格納用オブジェクト または encoding が null を参照し、失敗
                ErrorInfo = 2;
            }

            return ErrorInfo;
        }

 

        //============
        // 指定コードバイト型配列 ---> ユニコードstring 変換メソッド
        //
        // 内容: 指定コード(例: シフトJISコード)のバイト型配列をユニコードの文字列に変換する。
        //
        // 第1引数: 変換前の文字列を入力指定(byte型配列のシフトJISコードの文字列)
        // 第2引数: 変換前のエンコードを入力指定(シフトJISコード時は、"shift_jis")
        // 第3引数: 変換後の文字列を出力(string型のユニコードの文字列)
        //
        // 戻り値: エラー情報(0から1: 成功、2以上: 失敗)
        // _______________(1: 警告(フォールバック発生))
        //
        // エンコーディングを示すコードページ名(第2引数指定値)
        //   シフトJIS: "shift_jis"
        //   JIS: "iso-2022-jp"
        //   日本語EUC: "euc-jp"
        //   Unicode (UTF-8): "utf-8"
        public static int ChangeBinaryToUnicodeStr(byte[] BeforeBytes, string BeforeEncod, out string UnicodeText)
        {

            // 初期化
            UnicodeText = "";
            int ErrorInfo = 0; // エラー情報

            // 入力がnull時のエラー処理
            if (BeforeBytes == null || BeforeEncod == null) return 2;

            // 文字コードを示すエンコードを生成
            System.Text.Encoding AfterEncodObj = System.Text.Encoding.Unicode; // 変換後エンコード
            System.Text.Encoding BeforeEncodObj = System.Text.Encoding.GetEncoding(BeforeEncod); // 変換前エンコード

            // 指定コードをユニコードに変換
            byte[] AfterBytes = null;
            try
            {
                AfterBytes = System.Text.Encoding.Convert(BeforeEncodObj, AfterEncodObj, BeforeBytes);
            }
            catch (DecoderFallbackException)
            {
                // フォールバックが発生
                ErrorInfo = 1;
            }
            catch (EncoderFallbackException)
            {
                // フォールバックが発生
                ErrorInfo = 1;
            }
            catch (ArgumentNullException)
            {
                // 入出力文字列格納用オブジェクト または encoding が null を参照し、失敗
                ErrorInfo = 2;
            }


            // バイト型配列のユニコード文字列をstring型に設定
            char[] AfterChars = new char[AfterEncodObj.GetCharCount(AfterBytes, 0, AfterBytes.Length)];
            AfterEncodObj.GetChars(AfterBytes, 0, AfterBytes.Length, AfterChars, 0);
            UnicodeText = new string(AfterChars);

            return ErrorInfo;
        }


    }
}

 



 

さいごに


本ページの内容説明については、元ページを参照して下さい。