/// <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);
}
0 件のコメント:
コメントを投稿