2

バイト配列の一部からchar配列またはcharポインタを取得するにはどうすればよいですか?18バイトで始まり、配列の終わりから4バイトで終わる、バイト配列の可変サイズの文字列があるとします。どうすればこれを入手できますか?

編集:そしてドットはどうですか?そのバイト配列にドットが必要ですが、memcpyでコピーすると、ドットのない文字列が表示されます。どうすればこれを修正できますか?

4

4 に答える 4

2

memcpyを使用して、任意の範囲のバイトをコピーできます。

const int index1 = 18;    // start index in src
const int index2 = 252;   // end + 1 index in src

char src[256];            // source array
char dest[256];           // destination array

memcpy(dest, &src[index1], index2 - index1);
                          // copy bytes from src[index1] .. src[index2 - 1]
                          // inclusive to dest[0] .. dest[index2 - index1 - 1]

これにより、インデックス18から251までのバイトがコピーされsrc、に格納されdestます。

于 2012-11-18T18:40:07.987 に答える
2

配列の一部を抽出するには、を使用できますmemcpy

#include <string.h>

char dst[4];

/* Here, we can assume `src+18` and `dst` don't overlap. */
memcpy(dst, src + 18, 4);

C11(n1570)、§7.24.2.1memcpy関数
このmemcpy関数は、が指すオブジェクトから。が指すオブジェクトにn文字をコピーしs2ますs1。オーバーラップするオブジェクト間でコピーが行われる場合、動作は定義されていません。

于 2012-11-18T18:40:15.013 に答える
1

グーグルの使用memcpy。それはあなたの質問を満足させます

const char *buffer = "I AM A VERY VERY VERY VERY VERY VERY VERY VERY BIG STRING";
char buffer2[4];

memcpy(buffer2, (buffer+18), 4);

そして、ファニーはあなたの叔母です。

于 2012-11-18T18:39:43.013 に答える
0

memcpy(宛先、ソース、カウント);

  • 宛先=ストレージエリア(!important destination_SIZE> = count)
  • ソース=コピーするデータを保持する配列(デフォルトの開始インデックス= 0、ただしバイトsource+nをスキップできます(ソース配列の外に出てはいけません))n
  • count=コピーされるバイト数。

小さな警告:ターゲットがソースと同じである場合は、すべてのオペランドをインデックスに保存する必要があります。

于 2018-05-15T11:51:59.260 に答える