バイト配列の一部からchar配列またはcharポインタを取得するにはどうすればよいですか?18バイトで始まり、配列の終わりから4バイトで終わる、バイト配列の可変サイズの文字列があるとします。どうすればこれを入手できますか?
編集:そしてドットはどうですか?そのバイト配列にドットが必要ですが、memcpyでコピーすると、ドットのない文字列が表示されます。どうすればこれを修正できますか?
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
ます。
配列の一部を抽出するには、を使用できます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.1
memcpy
関数
このmemcpy
関数は、が指すオブジェクトから。が指すオブジェクトにn文字をコピーしs2
ますs1
。オーバーラップするオブジェクト間でコピーが行われる場合、動作は定義されていません。
グーグルの使用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);
そして、ファニーはあなたの叔母です。
memcpy(宛先、ソース、カウント);
source+n
をスキップできます(ソース配列の外に出てはいけません))n
小さな警告:ターゲットがソースと同じである場合は、すべてのオペランドをインデックスに保存する必要があります。