读书人

C++Builder6.0中使用memcpy遇到奇怪的

发布时间: 2013-07-08 14:13:00 作者: rapoo

C++Builder6.0中使用memcpy遇到奇怪的问题

void AES::Cipher( BYTE* input, BYTE* output,int len)
{
output=new BYTE[len];
BYTE sinput[16];
BYTE soutput[16];
for(int i=0;i<len/16;i++)
{
memcpy(sinput,input+i*16,16);
Cipher(sinput,soutput);
memcpy(output+i*16,soutput,16);
}
ShowMessage("!");
if(len%16!=0)
{
memcpy(sinput,input+16*(len/16),len%16);

for(int i=len%16;i<(16-len%16);i++)
{
sinput[i]=0x00;
Cipher(sinput,soutput);

}
memcpy(output+16*(len/16),soutput,16);
}

}


我传进去的input大小等于len,如len=352;前面的i<11之前的memcpy(output+i*16,soutput,16);都好好的,output大小一直是300多,到i=11的时候突然刷成160!!这是为什么? C++Builder memcpy 动态数组
[解决办法]
void AES::Cipher( BYTE* input, BYTE* output,int len)
{
output=new BYTE[len]; //------------??有效吗?外面能读取吗?
BYTE sinput[16];
BYTE soutput[16];
for(int i=0;i<len/16;i++)
{
memcpy(sinput,input+i*16,16);
Cipher(sinput,soutput);
memcpy(output+i*16,soutput,16);
}
ShowMessage("!");
if(len%16!=0)
{
memcpy(sinput,input+16*(len/16),len%16);

for(int i=len%16;i<(16-len%16);i++)
{
sinput[i]=0x00;
Cipher(sinput,soutput);

}
memcpy(output+16*(len/16),soutput,16);
}

}

读书人网 >C++ Builder

热点推荐