バイナリコード変換時の処理に改行コードを含めて処理をしたいのですが
Posted: 2012年8月02日(木) 15:11
バイナリデータを16進数に変換して画面に出力したいと考えています。
画面に出力する際に、16バイト目で改行を行いこれを繰り返していきたいのです。
ですが、改行コード \r \n を入れたいのですがどのようにすればいいのかわかりません。
下記のソースの赤い部分で改行の処理を行ったのですが、
これですと \r に \n を上書きしているので意味が無くなってしまいます。
どのようにすればいいのかご教授いただけないでしょうか。
宜しくお願いします。
code
// コード表
static char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
// バイナリデータを16進に変換します。
public static string BinToHexstr(byte[] data)
{
int i; // ループ処理用
int array = 3; // 1バイト中のインデックス配列数
int arraycount = 15; // 文字列一行の制限数
int bindata; // ビットデータ格納場所
// 文字の長さを調べる
char[] textdata = new char[ data.Length * array ];
// 文字の長さを最大値とする
for ( i = 0; i < data.Length; i++ )
{
bindata = data; // バイナリデータを並べる
textdata[i * array] = hexDigits[bindata >> 4]; // 左4ビットを右に移動する
textdata[i * array + 1] = hexDigits[bindata & 0xF]; // 右4ビットを1111でANDする
textdata[i * array + 2] = ' '; // 1バイトに空白も含める
// iが15バイトの倍数を超えた場合、カーソルは行の先頭に戻る
if (i % (arraycount + 1) == arraycount)
{
textdata[i * array + 2] = '\r';
// \rが配列に存在する場合、カーソルは次の行の先頭に送られる
if (textdata[i * array + 2] == '\r')
{
textdata[i * array + 3] = '\n';
}
}
}
return new string( textdata ); // char型をstring型で返す
}
/code
画面に出力する際に、16バイト目で改行を行いこれを繰り返していきたいのです。
ですが、改行コード \r \n を入れたいのですがどのようにすればいいのかわかりません。
下記のソースの赤い部分で改行の処理を行ったのですが、
これですと \r に \n を上書きしているので意味が無くなってしまいます。
どのようにすればいいのかご教授いただけないでしょうか。
宜しくお願いします。
code
// コード表
static char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
// バイナリデータを16進に変換します。
public static string BinToHexstr(byte[] data)
{
int i; // ループ処理用
int array = 3; // 1バイト中のインデックス配列数
int arraycount = 15; // 文字列一行の制限数
int bindata; // ビットデータ格納場所
// 文字の長さを調べる
char[] textdata = new char[ data.Length * array ];
// 文字の長さを最大値とする
for ( i = 0; i < data.Length; i++ )
{
bindata = data; // バイナリデータを並べる
textdata[i * array] = hexDigits[bindata >> 4]; // 左4ビットを右に移動する
textdata[i * array + 1] = hexDigits[bindata & 0xF]; // 右4ビットを1111でANDする
textdata[i * array + 2] = ' '; // 1バイトに空白も含める
// iが15バイトの倍数を超えた場合、カーソルは行の先頭に戻る
if (i % (arraycount + 1) == arraycount)
{
textdata[i * array + 2] = '\r';
// \rが配列に存在する場合、カーソルは次の行の先頭に送られる
if (textdata[i * array + 2] == '\r')
{
textdata[i * array + 3] = '\n';
}
}
}
return new string( textdata ); // char型をstring型で返す
}
/code