Shift-jis文字列 <-> JIS7バイト配列 変換

消えない様に覚え書き。

探していたら、見つかりました。

C# でJIS7に変換しているのを紹介しているところが全く無いようで、他の言語を参考にしながら作りました。ですと

探していたら、見つかりました。

C# でJIS7に変換しているのを紹介しているところが全く無いようで、他の言語を参考にしながら作りました。ですと

        /// <summary>
        /// Shift-jis文字列をJISコードバイト配列に変換
        /// </summary>
        /// <param name=”value”></param>
        /// <returns></returns>
        public static byte[] ConvertSjisToJis7(string value)
        {
            var encoding = Encoding.GetEncoding(“shift_jis”);
            if (value == null)
            {
                throw new ArgumentNullException();
            }
            else if (value.Length != 1 || encoding.GetByteCount(value) != 2)
            {
                throw new ArgumentException(データ長異常);
            }
            var data = encoding.GetBytes(value);
            int high = data[0] <= 0x9F ? data[0] – 0x70 : data[0] – 0xB0;
            high = high * 2 – 1;
            int low = data[1] > 0x7F ? data[1] – 1 : data[1];
            if (low < 0x9E)
            {
                low -= 0x1F;
            }
            else
            {
                low -= 0x7D;
                high += 1;
            }
            data[0] = (byte)high;
            data[1] = (byte)low;
            return data;
        }
        /// <summary>
        /// JISコードをShift-jis文字列変換する
        /// </summary>
        /// <param name=”data”></param>
        /// <returns></returns>
        public static string ConvertJis7ToSjis(byte[] data, int startIndex, int length)
        {
            if (data == null)
            {
                throw new ArgumentNullException();
            }
            if (length != 2)
            {
                throw new ArgumentException(データ長異常);
            }
            byte[] sjis = new byte[2];
            Array.Copy(data, startIndex, sjis, 0, length);
            if (sjis[0] % 2 == 1)
            {
                sjis[1] += 0x1f;
            }
            else
            {
                sjis[1] += 0x7d;
            }
            if (sjis[1] >= 0x7f)
            {
                sjis[1]++;
            }
            sjis[0] = (byte)((sjis[0] – 0x21) / 2 + 0x81);
            if (sjis[0] >= 0x9e)
            {
                sjis[0] += 0x40;
            }
            var encoding = Encoding.GetEncoding(“shift_jis”);
            return encoding.GetString(sjis);
        }

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です