请用Read4实现Read
F家的面试题,题意不太容易懂,大概就是有个read4每次读4字节,然后要实现一个
int read(int size,char* buffer) 这样的函数。
int read(int size,char* buffer)
{
assert(size>0&&buffer);
static char extra[4];
static int extra_cnt=0;
int ret=0;
if (extra_cnt>0)
{
int t=min(size,extra_cnt);
memcpy(buffer,extra,t);
size-=t;
ret+=t;
extra_cnt-=t;
if(extra_cnt>0)
return ret;
}
int n=size>>2;
for(int i=0;i<n;i++)
{
int t=read4(buffer);
ret+=t;
if(t<4)
return ret;
}
int left=size%4;
if(left==0)
return ret;
char tmp[4];
int last_read=read4(tmp);
int t=min(last_read,left);
ret+=t;
memcpy(buffer,tmp,t);
if(last_read>left)
{
extra_cnt=last_read-left;
memcpy(extra,tmp+t,extra_cnt);
}
return ret;
}