0

私はプログラムを作成し、memcpyを使用して、次のコードを使用して数バイトのデータをコピーしています。

#define ETH_ALEN 6
unsigned char sourceMAC[6];
unsigned char destMAC[6];
char* txBuffer;
....
memcpy((void*)txBuffer, (void*)destMAC, ETH_ALEN);
memcpy((void*)(txBuffer+ETH_ALEN), (void*)sourceMAC, ETH_ALEN);

txBufferここで、1バイト未満または1バイトを超えるデータをこのバッファー()の最後にコピーしたいので、8の倍数ではありません(バイト境界全体で終了しません)。memcpy()使用できません(信じられませんか?)。

ラウンド4バイトである16ビット相当のデータを追加したいと思います。txtBuffer最初に、に格納した次の3ビットに値を追加する必要がintあり、4番目のビットは常に0です。次に、別の12ビット値をコピーする必要があります。これも。にありintます。

したがって、に格納されている最初の10進値intは0から7の間であり、最後の12ビットに入る2番目の数値についても同じことが言えます。保存された値は2^12の範囲内です。たとえば、intメモリの最後の3ビットを「ビットコピー」する必要がありますか、それともこれらすべての値を何らかの方法でマージする必要がありますか?

これらの3つの値を4バイトにコンパイルしてmemcpyでコピーする方法はありますか、それともビットセットのようなものを使用してビットごとにコピーする必要がありますか?

この問題をどのように解決すればよいですか?

ありがとうございました。

4

1 に答える 1

1

プラットフォームでintが4バイトであると仮定します

int composed = 0;

int three_bits = something;
int twelve_bits = something_else;

composed = (three_bits & 0x07) | (1 << 3) | ((twelve_bits << 4) & 0xFFFFFF0);
于 2012-10-29T17:19:48.780 に答える