#define buffer 128
int main(){
char buf[buffer]="";
ifstream infile("/home/kevin/Music/test.mp3",ios::binary);
infile.seekg(-buffer,ios::end);
if(!infile || !infile.read(buf,buffer)){
cout<<"fail!"<<endl;
}
ID3v1 id3;
cout<<sizeof(id3)<<endl;
memcpy(&id3,buf,128);
cout<<id3.header<<endl;
}
struct ID3v1{
char header[3];
char title[30];
char artist[30];
char album[30];
char year[4];
char comment[28];
bool zerobyte;
bool track;
bool genre;
};
Когда я делаю memcpy, кажется, что в поле заголовка помещается слишком много данных. Нужно ли мне просматривать каждый из членов структуры и копировать данные? Я также использую С++, но это больше похоже на стратегию «С». Есть ли лучший способ для С++?
ID3v1.header
, скорее всего, не заканчивается нулем. Вы печатаете все до\0
. - person lapk   schedule 11.03.2012buf
иbuffer
. Почему бы не назвать одногоbuf
, а другогоbufSize
? Илиbuffer
иbufferSize
? Это смущает! Кроме того, если все, что вы хотите скопировать, это тег ID3 и его размер равен128
, замените все128
константой со значимым именем, напримерID3TAG_SIZE
или любым другим. - person hochl   schedule 11.03.2012