私が持っていると言う:
unsigned char *varA, *varB, *varC;
varA=malloc(64);
varB=malloc(32);
varC=malloc(32);
varA の最初の32 バイトを varB に、varA の最後の32 バイトを varC に入れるにはどうすればよいですか?
memcpy(varB, varA, 32);
memcpy(varC, varA + 32, 32);
unsigned char
基になるデータ型はバイトと同じサイズであるため、これは単純です。、、、およびが整数の場合varA
、コピーする正しいバイト数を計算するには、サイズパラメータを(つまり32)に乗算する必要があります。もし私が衒学者だったら、上記の例で32を掛けることができたでしょうが、 ==1なので必要ありません。varB
varC
memcpy
sizeof(int)
sizeof(unsigned char)
sizeof(unsigned char)
varA + 32
ポインターに定数オフセットを追加するときにコンパイラーがそれを行うので、32を何も乗算する必要がないことに注意してください。
varA
もう1つ、高速にしたい場合は、2つの新しいバッファーを割り当ててそれらにコピーするのではなく、それぞれの半分を個別に処理するだけで十分な場合があります。
ループを使用して、個々のバイトを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);
よし、こうしよう……。
uint64 source;
uint32 upperBytes, lowerBytes;
upperBytes = source&0xFFFFFFFF00000000;
lowerBytes = source&0x00000000FFFFFFFF;
宿題完了。