• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:バイト配列)

バイト配列を連結する方法は?

このQ&Aのポイント
  • バイト配列を連結するには、C言語でのmemcpy関数を使用することができます。memcpy関数を使用すると、指定したサイズだけメモリをコピーすることができます。
  • まず、連結したい2つのバイト配列を用意します。この場合、buffer1とbuffer2です。次に、連結したいバイト数だけメモリを確保したbuffer3を用意します。
  • 最後に、memcpy関数を使用してbuffer1とbuffer2をbuffer3に連結します。memcpy関数には、コピー先のポインタ、コピー元のポインタ、コピーするデータのサイズを指定します。以上の手順で、buffer1とbuffer2を連結したbuffer3を作成することができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.1

System.arraycopy()メソッドを使います。 System.arraycopy(buffer1, 0, buffer2, 0, buffer1.length); System.arraycopy(buffer2, 0, buffer2, buffer1.length, buffer2.length); (この場合buffer1.lengthとbuffer2.lengthを固定数2にしてもよい) memcpyより字数が多いのがちょっと難ですけども、 System.arraycopy()は他の方法よりも高速だというので、 使用が推奨されています。

sha-girl
質問者

お礼

ご回答ありがとうございます。 System.arraycopyを使ってできました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • int型の内容をbyteの配列にコピー

    int型の内容をbyteの配列にコピーする方法を教えて下さい。 int i_value = 500; byte[] by_value; by_value = new byte[4]; // どのような処理が必要ですか? by_value[0]には、0x1 by_value[1]には、0xf4 と格納したいです。 数字→文字列→文字(byte)できたのですが…。 C言語の場合、memcpy関数で型が異なってもキャストすれば回避できました。 JAVAでの方法を教えて下さい。

    • ベストアンサー
    • Java
  • 長さ3のバイト配列

    長さ3のバイト配列 0~16777215の範囲の数値がありまして byte[ ] byteArrayA =BitConverter.GetBytes(0x00); byte[ ] byteArrayB =BitConverter.GetBytes(0xffffff); で、 00-00-00 FF-FF-FF と、長さ3固定のバイト配列を返して欲しい場合はどうすればいいのでしょう? そのまんまだとINT16かINT32かで配列の個数が違ってきますよね。 INT32型でだと4個の配列になっちゃいますが、3個でいいんです。 どうしましょう?

  • C# バイト配列へのコピーについて

    C#で開発を行っていますが、一部、C++コードから移植しているのですが、つまづいてしまいました。 環境:Visual Studio 2005 言語:C# で、void* を byte[] に変換したいのですが、出来るでしょうか? 【目的】 void* p; byte[] bytesAry = new byte[256]; ………… ………… (unsafeコード使用) の bytesAry[8]以降に p + 6 から 16バイト分コピーしたいので。 よろしくお願いします。

  • 2次元配列の数値管理をポインター操作で行いたい

    こんにちは。ちょっとわかりにくい説明かと思います。 行いたいイメージは byte test[2][X]= { {0,0,0,0,0},{1,1,1,1,1} }; というデータ配列Xの数が変動するので Mallocを使用して動的にメモリを確保したい。(ここでは例として5つとってますが) それをポインター変数により管理したいと考えています。 byte *test; byte num= 5; test = (byte *)MALLOC(sizeof(byte)*(2*(num))); というようにメモリを確保した後 ある文字列("01001"というような文字列)をこの配列にコピーしたい。 配列のイメージでは test[0]={{0,1,0,0,1}}; test[1]={{1,0,0,1,1}}; というような形で管理したいと思ってます。 pBuffer="01001"; memcpy(pBuffer, test[0], 5); pBuffer="10011"; memcpy(pBuffer, test[1], 5); このように実装しました。 これであってますでしょうか? さらに、ここからデータを取得したい場合 例えば二次元配列でいう test[0][1]に入っている(この例題では)1を取り出すには どのような記述になるのでしょうか? わかりにくい記述で申し訳ないですが、 ご存知の方、よろしくご教授ください。

  • C言語の配列のコピーについて

    C言語の配列のコピーについて int a[] = {1,2,3}; int b[3]; memcpy(b, a, sizeof(a)); は、分かるのですが、 int c[][3] = { {1,2,3}, {4,5,6}, {7,8,9}, {10,11,12} }; int d[4][3]; memcpy(d, c, sizeof(c)); の使い方は正しいのでしょうか? 1次元配列の場合は連続するメモリ?なのでmemcpyでOKだと思うのですが 2次元以上の配列の場合は、メモリが連続しているか知らないので 不安に思いました。 実際、C言語でのメモリの取り方など詳しく書かれている本などありますか? よく初心者向け本にメモリは箱という大雑把なイメージで取り挙げられているのですが、突っ込んだ書籍等も探しています。 玄人の方、難しく(^^教えてください。

  • 配列のコピーについて

    C言語での配列のコピーについて調べているのですが、memcpyの使い方がよくわかりません 例えば memcpy(a,b,16); と for(i=0;i<16;i++){ a[i]=b[i]; } では何が違うのでしょうか? 教えていただけたら幸いです。

  • C++言語の配列の呼び方,動的・可変長の違い

    C++言語での配列の名称についての質問です. int Array[10]; みたいに宣言する普通の配列は「静的配列」と呼びますよね.コンパイル時に定数で要素数を指定しておかなければならないからですよね. これに対して,new[]演算子を用いて int *Array = new int[n]; といったように確保する配列はなんと呼ばれるのでしょうか. 実行後に変数を用いてその要素数を動的に指定できるので,「動的配列」と呼ぶ人が周りには多いです(「ポインタ配列」とも).しかし,C言語でのrealloc関数みたいに,直接に配列長を変化させるといったようなことはできませんよね. (改めてnew[]してmemcpy()すれば出来るのでしょうが) そこで,配列長をプログラム中で自在に変化させる方法としてstd::vectorを利用する方法がありますよね.このvectorを「動的配列」と呼ぶ人もいました. 私は,new[]したものは動的に要素数を指定できるがその後の配列長は固定であり,vectorはいつでも配列長が可変なので int Array[10]; ・・・静的固定長配列(静的配列) int n = 10; int *Array = new[n]; ・・・動的固定長配列 std::vector<int> v; ・・・可変長配列 と呼んでいるのですが,一般的にはそれぞれどのように呼ばれるのでしょうか. また,最近はstd::arrayをいうものを知りました.これについてもどのように呼ばれるのか,教えてください. よろしくお願いいたします.

  • メモリ上に配置されていないバイト配列を代入

    memcpyでメモリ上に配置されていないバイト配列を代入する方法を教えて下さい。 #include<iostream.h> int main() { char str[3]; memcpy(str,"aa",3); printf("%s",str); return 0; } これは分かるんですが、バイト配列では"aa"のところに何を書けばいいんですか? memcpy(str, (char *){0x61,0x61,0x0}, 3);ではコンパイルできませんでした。 str[0]=0x61;のように1つずつなら代入できるんですが、配列ごとの方法が分かりません。

  • 可変長配列を、動的確保した固定長配列へコピーしたい

    javaではcopyintoで固定長配列へ代入できたのですが、 C++でそれに該当するものが見つからず、 newで確保した領域へmemcpyも試してみたのですが、 うまく行きませんでした。 コピー元はvector<RGBQUAD> v_rgbBMP; コピー先はRGBQUAD *rgbMemBMP; 要素数カウンタをnCntとすると rgbMemBMP = new RGBQUAD[nCnt]; memcpy(rgbMemBMP, v_rgbBMP, sizeof(v_rgbBMP)); でエラーが error C2664: 'memcpy' : 2 番目の引数を 'class std::vector<struct tagRGBQUAD,class std::allocator<struct tagRGBQUAD> >' から 'const void *' に変換できません。 ご覧のとおりSTLをよく理解しないまま、 とりあえず通常配列と同様に扱おうとして失敗しました。 現在はforで配列要素を一つ一つ代入しているのですが、 その処理は大量の画像をまとめる処理を行う核で使用しており、 何度も通過する為、できれば直接代入したいのですが、 何かよい手は無いでしょうか?

  • 0バイト文字の送信

    C#ですが、C/C++でも同じだと思うので、 お願いします。 たとえば、"abcde"という文字を、終端文字0バイト として、送信したいのですが、どうしたらいいので しょうか。 string mys="abcde"; byte[] mybyte=new byte[1024]; mybyte=Encoding.UNICODE.GetBytes(mys); mynetwork.Write(mybyte,0,mybyte.Length); こんな感じで、書き出すつもりですが、終端が、 0バイトには、なっていないようです。 (ちなみに、JAVAだと、文字列を、送るので "abcde\0"で、うまくいきます。バイト配列で 送る場合が、わかりません。 分かる人がいましたら、お願いします