質問者
バイナリデータ関連、データの長さについて

質問
-
いつもお世話になっています。
バイナリデータの保存について質問したものです。
”あいうえお”をEucのバイナリに変換するとA4-A2-A4-A4-A4-A6-A4-A8-A4-AAのようになります。
変換されたA4-A2-A4-A4-A4-A6-A4-A8-A4-AAをtest.binというファイルに保存をしているのですが、
問題はA4-A2-A4-A4-A4-A6-A4-A8-A4-AAの長さを測って一番前につけたいと思います。
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.TextBox TextBox1;
byte[] bytes;private void Page_Load(object sender, System.EventArgs e)
{
string str = "あいうえお";Encoding sjisEnc = Encoding.GetEncoding("euc-jp");
bytes = sjisEnc.GetBytes(str);
TextBox1.Text = BitConverter.ToString(bytes);
// 出力:A4-A2-A4-A4-A4-A6-A4-A8-A4-AA
}バイナリエディタでデータを確認するとちゃんとデータが入っていました。
エディタ上で長さを測ってみたら、0xA(10)bytesだというのがわかりましたが、
ASP.NETを使って0A-A4-A2-A4-A4-A4-A6-A4-A8-A4-AAのデータの一番前に
このように0xA(10)bytesの0Aをつけてtest.binというファイルとして保存したいのです。
アドバイスの方をお願い致します。
すべての返信
-
いつもお世話になっています。
データの長さは
protected System.Web.UI.WebControls.TextBox TextBox1;
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.TextBox TextBox2;
byte[] bytes;
byte[] bytes1;
int Byte_Count;
private void Page_Load(object sender, System.EventArgs e)
{string str = "あいうえお";
Encoding sjisEnc = Encoding.GetEncoding("euc-jp");
bytes = sjisEnc.GetBytes(str);
Encoding sjisEnc1 = Encoding.GetEncoding("euc-jp");
Byte_Count = sjisEnc1.GetByteCount(str);
bytes1 = BitConverter.GetBytes(Byte_Count);
TextBox1.Text =BitConverter.ToString(bytes);// 出力:A4-A2-A4-A4-A4-A6-A4-A8-A4-AA
TextBox2.Text =BitConverter.ToString(bytes1);// 出力:0A-00-00-00
}private void Button1_Click(object sender, System.EventArgs e)
{
FileStream fs = new FileStream(@"e:\bsdata\testhong.bin",FileMode.OpenOrCreate);
fs.SetLength(0);
BinaryWriter w = new BinaryWriter(fs);
w.BaseStream.Seek(0,SeekOrigin.Begin);w.Write(bytes+bytes1);★二つのByte型のデータをつないで『0A-A4-A2-A4-A4-A4-A6-A4-A8-A4-AA』のようにtest.binファイルに保存したいのです。
w.Close();
fs.Close();
}どなたか教えていただけないでしょうか?よろしくお願いいたします。
-
って、件名からすると、Byte配列の連結もできていないのでしょうか?
だとすると、 Bytes_Count を配列にする必要もないですね。
参考にしてください。byte a ;
byte[] b, c;a = 10; //(byte) GetBytes
Encoding enc = Encoding.GetEncoding("euc-jp");
b = enc.GetBytes("あいうえお");c = new byte[b.GetLength(0) + 1] ;
c[0] = a ;
for (int i = 0; i < b.GetLength(0) ; i++)
{
c[i+1] = b[ i ];
}
MessageBox.Show(BitConverter.ToString(c));