2

私が持っていると言う:

unsigned char *varA, *varB, *varC;
varA=malloc(64);
varB=malloc(32);
varC=malloc(32);

varA の最初の32 バイトを varB に、varA の最後の32 バイトを varC に入れるにはどうすればよいですか?

4

3 に答える 3

10
memcpy(varB, varA, 32);
memcpy(varC, varA + 32, 32);

unsigned char基になるデータ型はバイトと同じサイズであるため、これは単純です。、、、およびが整数の場合varA、コピーする正しいバイト数を計算するには、サイズパラメータを(つまり32)に乗算する必要があります。もし私が衒学者だったら、上記の例で32を掛けることができたでしょうが、 ==1なので必要ありません。varBvarCmemcpysizeof(int)sizeof(unsigned char)sizeof(unsigned char)

varA + 32ポインターに定数オフセットを追加するときにコンパイラーがそれを行うので、32を何も乗算する必要がないことに注意してください。

varAもう1つ、高速にしたい場合は、2つの新しいバッファーを割り当ててそれらにコピーするのではなく、それぞれの半分を個別に処理するだけで十分な場合があります。

于 2013-01-30T22:35:41.430 に答える
1

ループを使用して、個々のバイトを1つずつコピーできます。

for (int i = 0; i != 32; ++i)
    varB[i] = varA[i];

for (int i = 0; i != 32; ++i)
    varC[i] = varA[32 + i];

またはmemcpy、Cランタイムライブラリの関数:

memcpy(varB, varA, 32);
memcpy(varC, varA + 32, 32);
于 2013-01-30T22:39:44.857 に答える
-3

よし、こうしよう……。

uint64 source;
uint32 upperBytes, lowerBytes;

upperBytes = source&0xFFFFFFFF00000000;
lowerBytes = source&0x00000000FFFFFFFF;

宿題完了。

于 2013-01-30T22:39:58.477 に答える