| 以下のようなコードでSJISの範囲にある文字のみを変換することでうまくいきました。
int dispSize = 0x20 * 0x0F;
txtBinHex.Text = BitConverter.ToString(fileBuffer, dispPos, dispSize)
.Replace('-', ' ');
StringBuilder binsb = new StringBuilder();
byte curBin, nexBin;
for (int i = 0; i < dispSize; i++)
{
curBin = fileBuffer[dispPos + i];
nexBin = fileBuffer[dispPos + i + 1];
if ((0x20 <= curBin && curBin <= 0x7F)
|| (0xA0 <= curBin && curBin <= 0xDF))
{
binsb.Append(sjis.GetString(new Byte[] { curBin }));
}
else if ((0x81 <= curBin && curBin <= 0x9F)
|| (0xe0 <= curBin && curBin <= 0xfd))
{
if (0x40 <= nexBin)
{
binsb.Append(sjis.GetString(new Byte[] { curBin, nexBin }));
i++;
}
else
{
binsb.Append(".");
}
}
else
{
binsb.Append(".");
}
if (i % 16 == 15)
{
binsb.Append("\r\n");
}
}
しかしながら、今度はテキストボックス側の文字コードがUTF-8であるため、
16進表示との選択位置の同期のたびにSJIS換算の文字数を計算しなければならず非常に動作が重たくなってしまいました。
またText→Hexで編集を同期する方法がまったくわかりません。 |