تور لحظه آخری
امروز : شنبه ، 1 اردیبهشت 1403    احادیث و روایات:  
سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون شرکت ها

تبلیغات

بلومبارد

تبلیغات متنی

تریدینگ ویو

خرید اکانت اسپاتیفای

کاشت ابرو

لمینت دندان

لیست قیمت گوشی شیائومی

صرافی ارکی چنج

صرافی rkchange

لوله پلی اتیلن

دانلود سریال سووشون

دانلود فیلم

ناب مووی

مرجع خرید تجهیزات آشپزخانه

خرید زانوبند زاپیامکس

رسانه حرف تو - مقایسه و اشتراک تجربه خرید

کلاس باریستایی تهران

تعمیر کاتالیزور

تعمیر گیربکس اتوماتیک

دیزل ژنراتور موتور سازان

سرور اختصاصی ایران

سایت ایمالز

تور دبی

سایبان ماشین

جملات زیبا

دزدگیر منزل

ماربل شیت

تشریفات روناک

آموزش آرایشگری رایگان

طراحی سایت تهران سایت

آموزشگاه زبان

اجاره سند در شیراز

ترازوی آزمایشگاهی

رنگ استخری

فروش اقساطی کوییک

راهبند تبریز

ترازوی آزمایشگاهی

قطعات لیفتراک

وکیل تبریز

خرید اجاق گاز رومیزی

آموزش ارز دیجیتال در تهران

شاپیفای چیست

فروش اقساطی ایران خودرو

واردات از چین

قیمت نردبان تاشو

وکیل کرج

تعمیرات مک بوک

قیمت فنس

armanekasbokar

armanetejarat

صندوق تضمین

سیسمونی نوزاد

پراپ تریدینگ معتبر ایرانی

نهال گردو

صنعت نواز

پیچ و مهره

خرید اکانت اسپاتیفای

صنعت نواز

لوله پلی اتیلن

کرم ضد آفتاب لاکچری کوین SPF50

دانلود آهنگ

طراحی کاتالوگ فوری

واردات از چین

اجاره کولر

دفتر شکرگزاری

 






آمار وبسایت

 تعداد کل بازدیدها : 1797111813




هواشناسی

نرخ طلا سکه و  ارز

قیمت خودرو

فال حافظ

تعبیر خواب

فال انبیاء

متن قرآن



اضافه به علاقمنديها ارسال اين مطلب به دوستان آرشيو تمام مطالب
archive  refresh

باز کردن یک فایل و ویرایش کد هگز آن (ویژوال بیسیک) -


واضح آرشیو وب فارسی:سایت ریسک: باز کردن یک فایل و ویرایش کد هگز آن (ویژوال بیسیک) Mostafa Khalili 27 فروردين 1390, 08:10دوستان من میخواستم بدونم چطوری میشه یه فایل رو حالا با هر پسوندی رو توی ویبی به صورت هگز باز کرد و بشه کد هگز مورد نظر رو در اون جستجو کرد و یه مقدار جدید جایگزینش کرد و در نهایتش سیوش کرد. ممنون میشم اگر کسی سورسی یا کمکی میتونه بکنه چون در این ضمینه هیچ اطلاعی ندارم. the_king 27 فروردين 1390, 11:33دوستان من میخواستم بدونم چطوری میشه یه فایل رو حالا با هر پسوندی رو توی ویبی به صورت هگز باز کرد و بشه کد هگز مورد نظر رو در اون جستجو کرد و یه مقدار جدید جایگزینش کرد و در نهایتش سیوش کرد. ممنون میشم اگر کسی سورسی یا کمکی میتونه بکنه چون در این ضمینه هیچ اطلاعی ندارم. نگید هگز، عبارت باینری صحیح تره، چون هگز صرفا یک مبنای عددی و یک شیوه نمایش داده است، اما باینری علاوه بر اینکه یک مبنای عددی است، یک شیوه دسترسی به فایله، درست نقطه مقابل شیوه دسترسی متنی. موقعی که یک فایل رو با دستور Open و در مد For Binary باز می کنید، بصورت باینری باز میشه : Open "file.ext" For Binary As #1 و با فرمان Get از داخلش داده ها رو می خوانید : Get #1, , Data و با فرمان Put داده ها را داخلش می نویسید : Put #1, , Data و با فرمان Close فایل رو می بندید : Close #1 مثلا برنامه زیر فایل file.ext رو باز می کنه، دنبال بایت های 00 می گرده و همه شون رو به FF تغییر می ده : Dim Data() As Byte, Pos As Long, Length As Long Open "file.ext" For Binary As #1 Length = LOF(1) If Length > 0 Then ReDim Data(0 To Length - 1) Get #1, 1, Data For Pos = 0 To Length - 1 If Data(Pos) = &H0 Then Data(Pos) = &HFF Next Put #1, 1, Data End If Close #1 Mostafa Khalili 27 فروردين 1390, 11:48ممنون دوست عزیز حالا یه سوال دیگه این روشی که شما گفتید هر فایلی رو که خواستیم باز میکنه؟؟ مثلا jpg یا exe و میشه داخلش تغیراتی به وجود آورد طبق همون روشی که گفتید؟ the_king 27 فروردين 1390, 17:24ممنون دوست عزیز حالا یه سوال دیگه این روشی که شما گفتید هر فایلی رو که خواستیم باز میکنه؟؟ مثلا jpg یا exe و میشه داخلش تغیراتی به وجود آورد طبق همون روشی که گفتید؟ بله، وقتی فایل رو بصورت باینری باز می کنید فایل رو یکسری داده ها خام در نظر می گیره و اینکه داخل فایل چی قرار داره و فرمت فایل چیه اهمیتی نداره. Mostafa Khalili 28 فروردين 1390, 05:41بسیار تا بسیار متشکر هیچ فکر نمیکردم این انجمن به این سرعت مشکلات یه نفرو برطرف کنه. اگر اشکالی نداره یه سوال دیگه هم در این رابطه بپرسم. شما فرض کنید ما دو تا فایل داریم.میخواییم فایل شماره یک رو باز کنیم و مثلا مقداری از کدهای باینری فایلی رو که باز کردیم مثلا 10 خطش رو با کل محتوای باینری فایل دو جابه جا کنیم در این صورت باید چیکار کرد.مثلا به برنامه بگیم شما از فایل یک از ابتدای فلان خط شروع کن به جستجو تا اخر فلان خط و کل محتوای باینری فایل دوم رو در جایگزین محتوای انتخاب شده فایل اولی بکن. خودم فکر میکنم برای این کار باید از آدرسی دهی از طریق آفست انجام بشه.البته یه حدس بود ممنون میشم مثل قبل راهنماییم کنید. the_king 28 فروردين 1390, 14:22بسیار تا بسیار متشکر هیچ فکر نمیکردم این انجمن به این سرعت مشکلات یه نفرو برطرف کنه. اگر اشکالی نداره یه سوال دیگه هم در این رابطه بپرسم. شما فرض کنید ما دو تا فایل داریم.میخواییم فایل شماره یک رو باز کنیم و مثلا مقداری از کدهای باینری فایلی رو که باز کردیم مثلا 10 خطش رو با کل محتوای باینری فایل دو جابه جا کنیم در این صورت باید چیکار کرد.مثلا به برنامه بگیم شما از فایل یک از ابتدای فلان خط شروع کن به جستجو تا اخر فلان خط و کل محتوای باینری فایل دوم رو در جایگزین محتوای انتخاب شده فایل اولی بکن. خودم فکر میکنم برای این کار باید از آدرسی دهی از طریق آفست انجام بشه.البته یه حدس بود ممنون میشم مثل قبل راهنماییم کنید. ابتدا به این نکته توجه کنید که در فایل باینری خط مفهوم خاصی نداره، خط و سطر مربوط به فایل های متنی هستند. وقتی یک فایل باینری رو باز می کنید، هیچ پردازشی روی داده ها انجام نمیشه، واحد پردازش بایته، نه خط و سطر. شما در فایل باینری باید بگید بایت چندم. برای اینکه بدانید سطر شماره n از کدوم بایت شروع میشه بایستی داده های داخل فایل رو پیمایش کنید تا به کاراکتر های انتهای سطر (کاراکتر 13 و کاراکتر 10) برسید تا یک سطر تموم بشه. به عنوان مثال کد زیر 100 بایت ابتدای از فایل first.ext رو با 100 بایت ابتدای فایل second.ext تعویض می کنه، از فایل اول به فایل دوم منتقل میشه و از فایل دوم به فایل اول. داده ها این وسط از دست نمی روند و طبیعتا اگه این برنامه رو دوباره اجرا کنید داده های داخل ایندو فایل به جای اولیه شون بر می گردند : Dim Data 1(0 To 99) As Byte, Data 2(0 To 99) As Byte Open "first.ext" For Binary As #1 Open "second.ext" For Binary As #2 Get #1, , Data 1 Get #2, , Data 2 Put #1, 1, Data 2 Put #2, 1, Data 1 Close #1 Close #2 دقت کنید که در دستورات Put پارامتر دوم روی 1 تنظیم شده، یعنی از بایت 1 ام به بعد بخوان و بنویس. دلیلش این است که قبل از دستورات Put دستورات Get ای اجرا شده و موقعیت مکان نمای فایل ها 100 بایت به جلو حرکت کرده و دیگر ابتدای فایل نیست. زمانی که از دستور Get یا Put استفاده می کنید موقعیت مکان نما در فایل به همان اندازه که می خوانید یا می نویسید به سمت جلو حرکت می کنه، در نتیجه اگر می خواهید در همان مکان قبلی چیزی را بخوانید یا نویسید یا باید با استفاده از دستور Seek به موقعیت قبلی برگردید و یا در دستورات Put و Get بعدی موقعیت خواندن و نوشتن را مشخص کنید. در دستورات Get نیازی به این پارامتر 1 نبود، چون موقعیت مکان نما در فایلی که تازه باز شده همان بایت 1 ام است. اگر می خواهید بجای 100 بایت 10 سطر از فایل ها را بخوانید باید این مساله را هم در نظر بگیرید که 10 سطر ممکن است در یک فایل 50 بایت باشد و در یک فایل دیگر 1000 بایت و جابجا کردن بین 50 بایت و 1000 بایت نباید به داده های بعد از آنها آسیبی برساند، اگر مستقیما 1000 بایت را جایی قرار دهید که قبلا 50 بایت قرار داشته، 950 بایتی که بعد از 50 بایت قرار داشته را نابود می کنید و اگر 50 بایت را جایی قرار دهید که قبلا 1000 بایت قرار داشته، 950 بایت بعد از آن دست نخورده باقی می ماند. برای جلوگیری از این اتفاق باید تمام داده های بعد از 10 سطر را هم بخوانید و بنویسید. کد زیر اینکار را به درستی انجام می دهد، 10 سطر از فایل first.txt را با 10 سطر از فایل second.txt تعویض می کند. فقط دقت کنید که قرار است محتویات فایل ها داده های متنی ASCII باشند : Dim Data As String, Length As Long Dim Lines1() As String, Lines2() As String Dim Index As Long Open "first.txt" For Binary As #1 Length = LOF(1) If Length > 0 Then Data = Space(Length) Get #1, , Data Else Data = vbCrLf End If Lines1 = Split(Data, vbCrLf) Close #1 Open "second.txt" For Binary As #2 Length = LOF(2) If Length > 0 Then Data = Space(Length) Get #2, , Data Else Data = vbCrLf End If Lines2 = Split(Data, vbCrLf) Close #2 Open "first.txt" For Output As #1 For Index = 0 To 9 If Index > UBound(Lines2) Then Exit For Print #1, Lines2(Index) Next For Index = 10 To UBound(Lines1) Print #1, Lines1(Index) Next Close #1 Open "second.txt" For Output As #2 For Index = 0 To 9 If Index > UBound(Lines1) Then Exit For Print #2, Lines1(Index) Next For Index = 10 To UBound(Lines2) Print #2, Lines2(Index) Next Close #1 Mostafa Khalili 28 فروردين 1390, 18:24بازم ممنون علی آقا میخواستم بدونم میشه مانند دستور اول یه حالت سرچ مانندی براش به وجود آورد که مثلا بگیم شما از فلان جا باید که اولش &h8562127 بخون تا زمانی که رسیدی به &h564f547 بعدش وقتی به آخرش رسید این بشه اون محدوده ما و اون محدوده رو هم که میخواییم جایگزین کنیم فکر کنم بهتر بششه بدستش اورد . چون اینجوری شاید یک فایل چندین و چند هزار بایت داشته باشه و اینجوری کار خیلی سخت میشه. the_king 29 فروردين 1390, 05:32بازم ممنون علی آقا میخواستم بدونم میشه مانند دستور اول یه حالت سرچ مانندی براش به وجود آورد که مثلا بگیم شما از فلان جا باید که اولش &h8562127 بخون تا زمانی که رسیدی به &h564f547 بعدش وقتی به آخرش رسید این بشه اون محدوده ما و اون محدوده رو هم که میخواییم جایگزین کنیم فکر کنم بهتر بششه بدستش اورد . چون اینجوری شاید یک فایل چندین و چند هزار بایت داشته باشه و اینجوری کار خیلی سخت میشه. اعدادی مثل H8562127& چهار بایتی (32 بیتی) هستند و موقع جستجو کردن هم باید از نوع داده 32 بیتی Long استفاده کرد. فقط به این نکته توجه داشته باشید که وقتی 4 بایت 4 بایت داده ها رو پردازش می کنیم فرض رو بر این قرار دادیم که داده ها 4 بایتی نوشته شده اند، یعنی داده مورد نظر ما در میان یکسری داده 32 بیتی قرار گرفته و اگر از ابتدای فایل 4 بایت 4 بایت به جلو حرکت کنیم پیدایش می کنیم. وگرنه ممکنه موردی که جستجو می کنیم وجود داشته باشه اما پیدا نشه. به عنوان مثال در داده های زیر داده H11223344& هست اما اگر داده ها رو 32 بیتی پردازش کنیم بصورت قطعات 32 بیتی پردازش میشه و بین دو داده 32 بیتی قرار می گیره میشه و پیدا نخواهد شد (داده ها در فایل برعکس نوشته می شوند) : 88991122 33445566 77889900 طبیعتا جستجوی 32 بیتی (چهار بایتی) سریعتر از جستجوی 8 بیتی (یک بایتی) است اما همانند مثال بالا ممکنه موردی رو از دست بدهیم. در مثال زیر در فایل file.ext دنبال داده H11223344& می گردیم و اگر پیدا شد، متغیر Start موقعیت آن در فایل را بر حسب بایت مشخص می کند، این جستجو فقط زمانی موثر است که داده ها 32 بیتی ذخیره شده باشند : Dim Data As Long, Start As Long Open "file.ext" For Binary As #1 Do While Loc(1) + 4 <= LOF(1) Get #1, , Data If Data = &H11223344 Then Start = Loc(1) - 4 Exit Do End If Loop Close #1 می توانیم همینکار را با جستجوی 8 بیتی (یک بایتی) انجام دهیم که طبیعتا کندتر است چون هر بایتی چهار بار جستجو می شود، اما مزیت این شیوه در این است که هیچ موردی را از قلم نمی اندازد : Dim Data As Long, Start As Long, Length As Long, Pos As Long Open "file.ext" For Binary As #1 Length = LOF(1) For Pos = 1 To Length - 3 Get #1, Pos, Data If Data = &H11223344 Then Start = Pos Exit For End If Next Close #1 حالا شما می توانید این جستجو را دوبار انجام دهید، یکبار دنبال نقطه شروع بگردید و یکبار دنبال نقطه پایان و سپس داده های بین ایندو را بخوانید و بنویسید. Mostafa Khalili 29 فروردين 1390, 05:58دستتون درد نکنه. بحث خیلی جالبی شده واسه من که برای اولین بار دارم با باینری کار میکنم و چیزای خوبی از شما یاد گرفتم ولی طبیعاتا چون بار اولمه دارم آخراش قاطی میکنم. من یه فایل ضمیمه کردم با فرمت EEC حالا میخوام یه محدوده از dfb 8c35d تا 7f06f9a 7 که در این فایل موجوده محدوده ما قرار بگیره و ما به جای این محدوده یه مقادیر دیگری از هر فایلی که خواستی رو جایگزینش کنید.ممنون میشم سورس رو برای این بنویسید چون فکر کنم بهتر موضوع رو درک کنم. the_king 29 فروردين 1390, 08:04دستتون درد نکنه. بحث خیلی جالبی شده واسه من که برای اولین بار دارم با باینری کار میکنم و چیزای خوبی از شما یاد گرفتم ولی طبیعاتا چون بار اولمه دارم آخراش قاطی میکنم. من یه فایل ضمیمه کردم با فرمت EEC حالا میخوام یه محدوده از dfb 8c35d تا 7f06f9a 7 که در این فایل موجوده محدوده ما قرار بگیره و ما به جای این محدوده یه مقادیر دیگری از هر فایلی که خواستی رو جایگزینش کنید.ممنون میشم سورس رو برای این بنویسید چون فکر کنم بهتر موضوع رو درک کنم. به این مساله توجه کنید که اعداد 32 بیتی در حافظه بصورت بایت های معکوس نوشته می شوند، مثلا عدد H12345678& به صورت بایت های متوالی زیر نوشته می شود : 78 56 34 12 بنابر این اگر می خواهید دنبال بایت های متوالی DF B 8 C3 5D بگردید باید دنبال مقدار H5DC3B 8DF& بگردید، نه مقدار HDFB 8C35D& برای ساده تر شدن کد چند تابع می سازیم : تابع ReadData از داخل فایل داده ها را به طول درخواستی خوانده و بر می گرداند. پارامتر اول فایل است که با شماره های 1 و 2 و ... مشخص می کنیم، پارامتر دوم Start موقعیت شروع خواندن است و پارامتر سوم طول داده درخواستی بر حسب بایت است : Private Function ReadData(ByVal File As Integer, ByVal Start As Long, ByVal Length As Long) As Byte() Dim Data() As Byte, Pos As Long Pos = Seek(File) ReDim Data(0 To Length - 1) Get File, Start, Data Seek File, Pos ReadData = Data End Function تابع WriteData را برای نوشتن داده ها در فایل تعریف می کنیم. پارامتر اول فایل است که با شماره های 1 و 2 و ... مشخص می کنیم، پارامتر دوم Start موقعیت شروع نوشتن است و پارامتر سوم داده ای است که باید نوشته شود : Private Sub WriteData(ByVal File As Integer, ByVal Start As Long, ByRef Data() As Byte) Dim Pos As Long Pos = Seek(File) Put File, Start, Data Seek File, Pos End Sub یک تابع به نام FindDataLong هم ایجاد می کنیم که در فایل دنبال یک داده 32 بیتی Long بگردد و موقعیت آنرا برگرداند، جستجو 8 بیتی است و هیچ موردی را از قلم نمی اندازد. پارامتر اول فایل است که با شماره های 1 و 2 و ... مشخص می کنیم، پارامتر دوم Start موقعیت شروع جستجو است و پارامتر سوم داده ای است که باید جستجو شود : Private Function FindDataLong(ByVal File As Integer, ByVal Start As Long, ByVal Data As Long) As Long Dim Buffer As Long, Length As Long, Pos As Long Length = LOF(File) For Pos = Start To Length - 3 Get #1, Pos, Buffer If Buffer = Data Then FindDataLong = Pos Exit For End If Next End Function در مثال زیر ما ابتدا در فایل VB.EEC موقعیت دو داده H5DC3B 8DF& و HA 7F9067F& را پیدا می کنیم که اولی Start است و دومی Finish و اگر پیدا نشدند با نمایش پیغام روال متوقف می شود. اگر هر دو پیدا شدند، طول داده میان آنها (شامل خود دو داده شروع و پایان هم می شود) برابر است با Finish - Start + 4 که Length خواهد بود. سپس از داخل فایل file.ext داده ای به همین طول از ابتدای فایل خوانده شده و در همان موقعیت Start در فایل VB.EEC نوشته می شود : Dim Start As Long, Finish As Long, Length As Long Dim Data() As Byte Open App.Path & "Vb.EEC" For Binary As #1 Start = FindDataLong(1, 1, &H5DC3B 8DF) If Start = 0 Then MsgBox "Start position not found!" Else Finish = FindDataLong(1, Start, &HA 7F9067F) If Finish = 0 Then MsgBox "Finish position not found!" Else Length = Finish - Start + 4 Open App.Path & "file.ext" For Binary As #2 Data = ReadData(2, 1, Length) Close #2 WriteData 1, Start, Data End If End If Close #1 Mostafa Khalili 29 فروردين 1390, 19:32عالی بود تشکر میکنم. حالا میخوام ببینم که اگر بخواییم کل محتوای فایل دومی رو در اون محدوده فایل اولی بریزیم باید چه کرد؟چون شما توی اون سورس اشاره کردید که به اندازه طول همون فایل اولی از فایل دوممون رو میگیره. درضمن یه مسئله دیگه ای هم توی این کدی که گذاشتید هستش که میخواستم ببینم چرا وقتی ما برای جستجوی عبارتون یه مقدار 00 یا 0000 وارد میکنیم همه صفر ها رو حذف میکنه و یک صفر رو باقی میگذاره؟ دلیلش چیه و چطوری باید درستش کرد؟ ضمن اینکه اگر بخواییم به صورت چهار بایت چهار بایت جستجو کنیم چیکار باید کرد چون من هر کار میکنم فقط همون 00 و ff جواب میده بیشتر از این مقدار نمیشه. [/code]مثلا برنامه زیر فایل file.ext رو باز می کنه، دنبال بایت های 00 می گرده و همه شون رو به ff تغییر می ده : dim data() as byte, pos as long, length as long open "file.ext" for binary as #1 length = lof(1) if length > 0 then redim data(0 to length - 1) get #1, 1, data for pos = 0 to length - 1 if data(pos) = &h0 then data(pos) = &hff next put #1, 1, data end if close #1 the_king 30 فروردين 1390, 06:06عالی بود تشکر میکنم. حالا میخوام ببینم که اگر بخواییم کل محتوای فایل دومی رو در اون محدوده فایل اولی بریزیم باید چه کرد؟چون شما توی اون سورس اشاره کردید که به اندازه طول همون فایل اولی از فایل دوممون رو میگیره. برای اینکه بتوانید داده هایی با هر طولی رو در فایل اول بنویسید باید ابتدا بقیه فایل اول را هم جداگانه بخوانید تا بعد از نوشتن داده های فایل دوم آنها را دقیقا در موقعیتی که داده های فایل دوم تمام می شود بنویسید : Dim Start As Long, Finish As Long, Length As Long Dim Data 1() As Byte, Data 2() As Byte, Data 3() As Byte Open App.Path & "Vb.EEC" For Binary As #1 Length = LOF(1) Start = FindDataLong(1, 1, &H5DC3B 8DF) If Start = 0 Then MsgBox "Start position not found!" Else Finish = FindDataLong(1, Start, &HA 7F9067F) If Finish = 0 Then MsgBox "Finish position not found!" Else If Start > 1 Then Data 1 = ReadData(1, 1, Start - 1) End If If Finish < Length - 3 Then Data 3 = ReadData(1, Finish + 4, Length - Finish - 3) End If Open App.Path & "file.ext" For Binary As #2 Data 2 = ReadData(2, 1, LOF(2)) Close #2 Close #1 Kill App.Path & "Vb.EEC" Open App.Path & "Vb.EEC" For Binary As #1 If Start > 1 Then WriteData 1, 1, Data 1 End If WriteData 1, Start, Data 2 If Finish < Length - 3 Then WriteData 1, Start + UBound(Data 2) + 1, Data 3 End If End If End If Close #1 درضمن یه مسئله دیگه ای هم توی این کدی که گذاشتید هستش که میخواستم ببینم چرا وقتی ما برای جستجوی عبارتون یه مقدار 00 یا 0000 وارد میکنیم همه صفر ها رو حذف میکنه و یک صفر رو باقی میگذاره؟ دلیلش چیه و چطوری باید درستش کرد؟ طول داده (بر حسب بیت یا بایت) توسط نوع داده مشخص میشه، نه مقداری که شما می نویسید، مثلا اگر متغیر Data از نوع Long تعریف شده، 32 بیتی (چهار بایتی) است، اگر مقدار H12& را هم داخلش قرار دهید به شکل H00000012& ذخیره و جستجو می شود. ویرایشگر ویژوال بیسیک 0 های اضافی را حذف می کند، اما اینکار تاثیری روی طول داده ندارد، فرقی بین H0& و H00& و H0000& و H00000000& نیست، همه شان صفر هستند. ضمن اینکه اگر بخواییم به صورت چهار بایت چهار بایت جستجو کنیم چیکار باید کرد چون من هر کار میکنم فقط همون 00 و ff جواب میده بیشتر از این مقدار نمیشه. نوع داده متغیر Data را ببینید، Byte است، بنابر این فقط یک مقدار بین H00& و HFF& در آن قرار می گیرد : Dim Data() As Byte برای جستجو 32 بیتی بایستی از نوع داده Long استفاده کنید، به این نکته هم توجه کنید که اگر در جستجوی 32 بیتی دنبال H0& بگردید در حقیقت دارید دنبال H00000000& می گردید، یعنی به ترتیب بایت های 00 00 00 00 و اگر دنبال HFF& بگردید در حقیقت دارید دنبال H000000FF& می گردید، یعنی به ترتیب بایت های FF 00 00 00 Dim Data As Long, Pos As Long, Length As Long Open "file.ext" For Binary As #1 Length = LOF(1) Pos = 1 Do While Pos <= Length - 3 Get #1, Pos, Data If Data = &H0 Then Data = &HFF Put #1, Pos, Data Pos = Pos + 4 Else Pos = Pos + 1 End If Loop Close #1 Mostafa Khalili 30 فروردين 1390, 20:15خب تمامی مشکلاتم برطرف شد و حالا سوال آخری از این مبحث رو دارم. من میخوام بدونم چطوری میشه که محدوده دوم رو از فایل شماره یک حذف کرد و به برنامه بگیم که بجای محدوده شماره دومی که میخواد پیدا کنه به جاش تا آخر فایل رو سلکت کنه. the_king 31 فروردين 1390, 05:37خب تمامی مشکلاتم برطرف شد و حالا سوال آخری از این مبحث رو دارم. من میخوام بدونم چطوری میشه که محدوده دوم رو از فایل شماره یک حذف کرد و به برنامه بگیم که بجای محدوده شماره دومی که میخواد پیدا کنه به جاش تا آخر فایل رو سلکت کنه. خیلی ساده، بجای اینکه دنبال فلان مقدار برای Finish بگردید... Finish = FindDataLong(1, Start, &HA 7F9067F) مستقیما Finish را روی انتهای فایل اول تنظیم کنید : Finish = LOF(1) سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود




این صفحه را در گوگل محبوب کنید

[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 2684]

bt

اضافه شدن مطلب/حذف مطلب







-


گوناگون

پربازدیدترینها
طراحی وب>


صفحه اول | تمام مطالب | RSS | ارتباط با ما
1390© تمامی حقوق این سایت متعلق به سایت واضح می باشد.
این سایت در ستاد ساماندهی وزارت فرهنگ و ارشاد اسلامی ثبت شده است و پیرو قوانین جمهوری اسلامی ایران می باشد. لطفا در صورت برخورد با مطالب و صفحات خلاف قوانین در سایت آن را به ما اطلاع دهید
پایگاه خبری واضح کاری از شرکت طراحی سایت اینتن