PDA

View Full Version : problem HEX viewer



warrior_hamed
چهارشنبه 01 اردیبهشت 1395, 17:24 عصر
سلام ، دوستا گرامی بنده یک هدفی رو دارم یک برنامه ای هست دارم روش کار میکنم که این یک فایل رو مثلا یک عکس رو باز کنه اونو تبدیل کنه به 0 و 1 و اونو دخیره کنه تا الان تونستم Asci بگیرم حالا تا صفر و یک برسه :لبخندساده:

این برنامه یه فایلو با دستور Open for binary میگیره و با دستور get میریزه تو تکست باکس مثلا یه عکس یا یه فایل متنی

هر بار دستور get یک استرینگ رو به طول یک واحد از فایل باز میکنه و تبدیل میکنه به Asci و میشمره مثلا چند بایت از فایل باز شده

بنده به دو روش این تکرار رو گرفتم یکی استفاده از تایمر (کلید Start) و یکی استفاده از حلقه Do Loop (کلید Fast!)

یک فایل exe ضمیمه کردم یک بار که یک فایل رو باهاش باز کنید و کلید استارت رو بزنید شروع میکنه به تبدیل Asci حالا متن یا عکس برای سریع تر بودن متن بهتره (pause/Resumeداره:لبخند:)

دکمه Fast : البته هنوز یک مشکلاتی هست این وسط که بر میگرده به سرعت و نحوه محاسبه پس از این گزینه فقط برای متن استفاده بشه نه فایل باینری که در ادامه توضیح میدم (Do Loop)

مشکل من : مشکل بنده سرعته ! یعنی اگر شما یک عکس 50 کیلو بایتی باز کنید 10 ثانیه طول میکشه تا رو حالت تایمر با Interval = 1 یک کیلو بایت تبدیل بشه به Asci رو حالت Do Loop هم که نمیدونم چطوری قابلیت pause resume بزارم براش چون موقعی که فایلو باز میکنید میره رو محاسبه و سایر دکمه ها رو صفحه غیر فعال میشه و اگه کلیک کنید میره رو Not Responding نمیدونم چه راه حل پراسسی هست که همچین محاسبه ای رو سریعا انجام بده یه فایل باینری رو 0 و 1 کنه تحویل بده بنده سورس یک هگزا دسیمال ویور گرفته بودم یک نرم افزاری بود که فایل عکس یا هرچیزی باز میکردی در عرض دو ثانیه نشون میداد از چه کاراکتر هایی تشکیل شده اما از کدش چیزی سر در نیوردم نمیدونم کسی توضیح بده بهم ممنون میشم

vbhamed
شنبه 04 اردیبهشت 1395, 05:24 صبح
سلام

اول از همه اینکه گذاشتن فایل exe بدون سورس ممنوعه، اما در مورد مشکل شما نیاز به تایمر نیست
از همون حلقه استفاده کنید و قبل از خوندن هر کاراکتر یا قطعه از فایل از دستور DoEvents استفاده کنید تا سیستم قفل نکنه
بعد تو کد دکمه Pause یک متغیر رو مقدارش رو 1 کنید و تو همون حلقه بالا دستوری بزارید که این متغیر رو چک کنه و اگر مقدارش 1 بود عملیات متوقف بشه

البته کار تبدیل معمولا اینقدر سریع انجام میشه که نیاز به این کارها نیست ولی اگر فایلتون خیلی خیلی بزرگ باشه مثلا در حد چند صد مگابایت یا گیگابایت اونموقع نیاز به همچین چیزی دارید
ضمنا برای تبدیل درست یک فایل باینری باید متغیری که باهاش فایل رو می‌خونید حتما از نوع byte باشه نه String وگرنه فایل خروجیتون خراب میشه

در مورد اون برنامه هم که گفتید در عرض دو ثانیه، کار این برنامه ها به این شکله که فقط اون مقداری که بهتون نشون میدن رو از فایل می‌خونن و وقتی صفحه رو بالا پایین می‌کنید دوباره مقدار مورد نظر رو از فایل می‌خونن و نمایش میدن نه اینکه یه دفعه کل فایل رو باز کنند، البته احتمالا مقداری رو هم به عنوان بافر اضافه تر باز می‌کنند ولی کل فایل رو نه، البته این در مورد همه نرم افزارها صدق نمی‌کنه و ممکنه نرم افزاری هم باشه که کل فایل رو یکجا باز کنه