请用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; }