ايران ويج

نسخه‌ی کامل: خواندن فایل باینری
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام

یه فایلی هست که باید اونو بخونم. رفتم مشخصات فایل رو در اوردم . نوشته بود ۱۰۰ بایت اولش مربوط به Header فایل هست که شامل ورژن وطول رکورد و ... هست .
مشکلی که دارم اینه که نمیشه درست و حسابی خوندش.
مثلا ورژن از بایت ۲۸ شروع میشه و ۴ بایت طولشه !!!‌
حالا یه نگاه به کد من بندازید لطفا ببنید کجاشو اشتباه نوشتم
کد:
int main(){
    long ver;
    ifstream fin;
    fin.open("water.shp", ios::in | ios:: binary);
    if(fin.fail() == 1) { cout << "Can't Open the File!" << endl; return(0); } // Check File
    //Get Header Data
    fin.seekg(28,ios::beg);
    fin.read((char*)&ver,sizeof(long));
    cout<<ver<<endl;
    return 0;
}
خروجی این کد با فایلی که دادم بهش : ۱۰۰۰
فقط ورژن اینجوری نیست . مثلا ماکسیمم X رو بدست میارم -۱۹۲۰۷۸۶
ممنون !
مشخصات فایل :‌Laugh
en.wikipedia.org/wiki/Shapefile
توضیحات کامل فایل مربوطه ضمیمه شد !‌
مهندس کدی که نوشتی file length از افست 24 تا 28 هست 28 تا 32 که شما داری میگیری ورژن فایل هست که برابر 1000 هست
به صفحه 4 از pdf ت دقت کن
(۲۵-فروردین-۱۳۸۹, ۲۲:۱۳:۵۲)lord_viper نوشته است: [ -> ]مهندس کدی که نوشتی file length از افست 24 تا 28 هست 28 تا 32 که شما داری میگیری ورژن فایل هست که برابر 1000 هست
به صفحه 4 از pdf ت دقت کن
سلام مهندس

من تو کد بالا جابه جا نوشتم !!
من ۲۸ تا ۳۲ رو که می خونم ۱۰۰۰ رو می گیرم و مشکلی نیست !!!‌
اما از ۲۴ که می خونم (۴ بایت) 1227292160- چاپ میشه !!! سایز که منفی نمیشه ؟
تو PDF نوشته از بایت ۰ تا ۳ مقدارش ۹۹۹۴ هست اما وقتی من می خونم این هست : 170328064

فقط ورژن رو خوب میگیرم !!!!

ممنون
کیست مرا یاری کند ؟Amaze
تو فایل pdf شما انتهای صفحه 2 نوشته
integer signed 32 bit integer 4 byte
duble signed 64 bit IEEEE 8 byte

به انتخابمتغییر و اشاره گر و ادرس دقت کنین

کد:
fin.read((char*)&ver,sizeof(long));
یه اشاره گر از نوع integer تعریف کنین و سایز رو هم 4 در نظر بگیرین نه 8
SizeOf(long)=8
(۲۷-فروردین-۱۳۸۹, ۱۰:۳۳:۵۳)lord_viper نوشته است: [ -> ]تو فایل pdf شما انتهای صفحه 2 نوشته
integer signed 32 bit integer 4 byte
duble signed 64 bit IEEEE 8 byte

به انتخابمتغییر و اشاره گر و ادرس دقت کنین

کد:
fin.read((char*)&ver,sizeof(long));
یه اشاره گر از نوع integer تعریف کنین و سایز رو هم 4 در نظر بگیرین نه 8
SizeOf(long)=8

سلام مهندس !
نگاه کنین ! تو صفحه ۴ نوشته بایت ۰ تا ۳ مربوط به کد فایل است که همیشه ۹۹۹۹۴ هست !!!
خوب منم اومدم یه int تعریف کردم ! سایزشم گرفتنم دیدم ۴ بایت هست !‌
حالا وقتی می خونم 170328064 نشون میده

کد :

کد:
int main(){
    int xx;
    ifstream fin;
    fin.open("water.shp", ios::in | ios:: binary);
    if(fin.fail() == 1) { cout << "I Can't Open The File!" << endl; return(0); } // Check File
    //Get Header Data
    fin.seekg(0,ios::beg);
    fin.read((char*)&xx,sizeof(int));
    cout<<xx<<endl;
    return 0;
}
میشه بگید مشکل این کد بالا چیه ؟ xx 4 بایت هست ...
ممنون
اون shape file ت رو اینجا اپلود کن فعلا c++ نصب ندارم با دلفی یه تستس میزنم بهت میگم
ضمیمه شد

با تشکر