byte [] bytData1 = null;
byte [] bytData2 = null;
があるとして、この2つのバイトアレイをstringの+みたいに接続
たとえば、bytData1=bytData1+bytData2 ;
とするにはどうすれば良いですか?
Windows.FAQ - ウィンドウズ処方箋
URLはダミーです
memcpy じゃだめなんすか?
memcpy(bytData1+offset,bytData2,length);
文字列なら
lstrcat(bytData1,bytData2);
でいけますよね
byte [] bytData1
byte [] bytData2
// なんらかの操作(配列拡張や代入)
for (i= 0 ; i < bytData1の配列長 ; i++)
bytData3[i]= bytData1[i]
for (j= 0 ; j < bytData2の配列長 ; i++, j++)
byteData[i]= bytData3[j];
C言語のmemcpy が使えるかどうかわからないので、
(MSDN(C#)にはなかったので…)
このような感じになります。
URLはダミーです。
1,2のどちらかしか思い浮かびませんでした。
もっとスマートで良い方法が間違いなくあると思うので,
他の人の回答を待って下さい。
1.
using( System.IO.MemoryStream tmp = new System.IO.MemoryStream() )
{
tmp.Write( bytData1, 0, bytData1.Length );
tmp.Write( bytData2, 0, bytData2.Length );
tmp.Seek( 0, System.IO.SeekOrigin.Begin );
bytData1 = mem.ToArray();
}
2.
byte [] bytTmp = new byte[bytData1.Length + bytData2.Length];
int i = 0;
foreach( byte x in bytData1 )
{
bytTmp[i++] = x;
}
foreach( byte x in bytData2 )
{
bytTmp[i++] = x;
}
bytData1 = bytTmp;
キャストして、
bytData1 = (byte[]) ((String)bytData1 + (String)bytData2);
とかじゃだめなんですよね??
演算子の振る舞いを変更するには演算子オーバーロードをしないとだめなのですすが、
・自分が作ったクラス
じゃないと、演算子の振る舞いの変更は出来ません。byteはクラスでないし、自分が作ったものでもないので、無理です。
http://www.hatena.ne.jp/1078363787
C#で、 byte [] bytData1 = null; byte [] bytData2 = null; があるとして、この2つのバイトアレイをstringの+みたいに接続 たとえば、bytData1=bytData1+bytData2 ; と.. - 人力検索はてな
URLはダミー。
昨日の回答がいまいちだったので,もう少し調べてみました。
byte [] bytTmp = new byte[bytData1.Length + bytData2.Length];
bytData1.CopyTo( bytTmp, 0 );
bytData2.CopyTo( bytTmp, bytData1.Length );
bytData1 = bytTmp;
少しはスマートになっかと。
そうですね。私もここの回答からヒントを得て、
バイトは配列なのでその要素をコピーするCOPYTOメソッドを使えばよいと気づきやって解決しました。一度試していたのですが、そのときはきちんと配列の要素数を確保していないのでエラーで、よく理解していないためにあきらめていました。
結局すべて解決しました。ありがとうございます。
1-4の方ありがとうございます。
質問がまぎらわしいなと後で思ったのですが、
どういう処理をしたいのか例示するためにそういう表記になってしまったので、別に演算子オーバーライドの事は関係ないです。
ちなみにbyte[]は(string)でキャストできません。
質問にC#と限定しているので(そのための質問なので)、できれば2と3の方のようにC#、NETの環境で一番スマートなやり方をお聞きしたいものです。