有谁能把memcpy函数详细的讲解一下呢?请问该怎么修改才正确?

extern void DES_EncryptBlock(char plainBlock[8],int subkeys[16][48],char cipherBlock[8])
{
int plainbit[64]={0};
int copyright[48]={0};

int cnt;
Char8tobit64(plainBlock,plainbit);
IP_transform(plainbit);
//16轮迭代
for(cnt=0;cnt<16;cnt++)
{

memcpy(copyright,plainbit+32,32);
E_transform(copyright);
DES_OR(copyright,subkeys[cnt],48);
DES_SBOX(copyright);
P_transform(copyright);
DES_OR(plainbit,copyright,32);
if(cnt!=15)
{
swap(plainbit,plainbit+32);

}

IP_1_transform(plainbit);
Bit64tochar8(plainbit,cipherBlock);

}

}这是DES加密的程序,但是memcpy那语句出错,32个数据没拷贝进去

千万里不及你
浏览 310回答 2
2回答

一只名叫tom的猫

void *memcpy(void *dest, const void *src, size_t n);由src指向地址为起始地址的连续n个字节的数据复制到以dest指向地址为起始地址的空间内。一般的,在32位编译环境中,sizeof(int)=4。所以你的第三个参数32肯定是不对的

素胚勾勒不出你

extern void DES_EncryptBlock(char plainBlock[8],int subkeys[16][48],char cipherBlock[8]){int plainbit[64]={0};int copyright[48]={0};int cnt;Char8tobit64(plainBlock,plainbit);IP_transform(plainbit);//16轮迭代for(cnt=0;cnt<16;cnt++){memcpy(copyright,plainbit+32,32*sizeof(int));E_transform(copyright);DES_OR(copyright,subkeys[cnt],48);DES_SBOX(copyright);P_transform(copyright);DES_OR(plainbit,copyright,32);if(cnt!=15){swap(plainbit,plainbit+32);}IP_1_transform(plainbit);Bit64tochar8(plainbit,cipherBlock);}memcpy(copyright,plainbit+32,32*sizeof(int));int copyright[48]={0};因为最后的长度是32*sizeof(int)不是32
打开App,查看更多内容
随时随地看视频慕课网APP