ورود

نسخه کامل مشاهده نسخه کامل : باز کردن فایل HEX موجود در کامپیوتر و خواندن بایت به بایت اون در C#



ma-bah
02-11-2012, 14:29
سلام به همگی ..
من یه برنامه می خوام بنویسم که ابتدا با openfiledialog یه فایل HEX رو از کامپیوتر باز کنم و بعد از اون ، مقادیر موجود در اون فایل رو بایت به بایت بخونم اونم تو یه حلقه ی FOR..

دوستان نظرشون چیه ؟؟ آخه من رشتم برقه برای کارم نیاز دارم و تو این مورد نمی دونم باید چیکار کنم

_H2_
02-11-2012, 17:54
سلام
فایل HEX دقیقاً یعنی چه؟

آیا فایلتان کاملاً باینری است؟
مثلا چیز جالب قابل مشاهده ای در Notepad ندارد؟
در این مورد میتوان از دستورات خواندن باینری استفاده کرد.

یا ذات فایلتان متنی است؟ و شامل کدهای hex است؟
یعنی فایلتان در Notepad قابل مشاهده است و چیزی شبیه 123abcdef0 در Notepad دیده میشود؟
در این مورد میتوان از دستورات ساده تر خواندن متنی استفاده کرد.

احیاناً از روی کنجکاوی ، بعدش در حلقه for میخواهید چه کار کنید؟!

ma-bah
02-11-2012, 18:24
سلام
فایل HEX دقیقاً یعنی چه؟

آیا فایلتان کاملاً باینری است؟
مثلا چیز جالب قابل مشاهده ای در Notepad ندارد؟
در این مورد میتوان از دستورات خواندن باینری استفاده کرد.

یا ذات فایلتان متنی است؟ و شامل کدهای hex است؟
یعنی فایلتان در Notepad قابل مشاهده است و چیزی شبیه 123abcdef0 در Notepad دیده میشود؟
در این مورد میتوان از دستورات ساده تر خواندن متنی استفاده کرد.

احیاناً از روی کنجکاوی ، بعدش در حلقه for میخواهید چه کار کنید؟!

سلام مهندس ....
ساختار فایل هگزی که دارم دقیقا شبیه مثالی هست که در این صفحه آمده ( وقتی با notepad باز می کنم مثل مثال صفحه ی زیر هست )
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

همون طور که توی استاندارد بالا هست توی هر خط فایل هگز یک سری داده مربوط به آدرس و یک سری از داده های باینری Data هستند .
قصد من اینه که این فایل هگز رو بایت بایت روی پورت سریال بفرستم همین و اون طرف دیوایسم که میکروکنترلر هست بتونه داده های یک بایتی دریافت کنه و توی حلقه ی For همین کار رو می خوام انجام بدم . با توجه به اینکه فایل توسط notepad خونده می شه پس فکر کنم که با فایل متنی مواجهیم
امیدوارم که متوجه شده باشید
با تشکر

راستی مهندس یه سوال دیگه برام پیش اومد ممنون می شم کمکم کنید . سوالم اینه که چه طور یه رشته ( حالت فایل هگز هست ) رو به عدد تبدیل کنیم ( توی رشته کاراکترهای 0123456789abcdef هست ). مثلا رشته "FF" رو به عدد 255 تبدیل کنیم ؟؟ تا جایی که من می دونم دستور زیر برای تبدیل رشته با عدد فقط در حالت دسیمال جواب می ده درسته ؟؟؟
int32.parse(string)

_H2_
02-11-2012, 19:49
سلام
دستور int.Parse معمولاً جهت تبدیل رشته "1234" به عدد 1234 است.
(یعنی تبدیل داده خام باینری درون حافظه 31.32.33.34 به D2.04.00.00)

ولی دستور فوق میتواند در حد حداکثر 64 بیتی تبدیل hex به bin را هم انجام دهد.
دستور زیر رشته "1234" را به عدد 4660 برابر 0x1234
(یعنی تبدیل داده خام درون باینری حافظه 31.32.33.34 به 34.12.00.00)

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ولی دستور فوق این تبدیل را تا حد 64 بیت انجام میدهد.
برای تبدیل Hex متنی به آرایه باینری باید خودتان یک کد بنویسید.

==============

dll ساده ای به نام ghdiamond.dll قبلاً نوشتم که توابع آماده ای برای این کار دارد.
فایل مذکور را میتوانید با فرمان Project>Add Reference به پروژه تان اضافه کنید.
اگر هم فایلتان کوچک و در حد یک یا دو مگ باشد، نیازی به حلقه for نخواهید داشت و دستورات زیر کافی خواهد بود.
در ساده ترین کد ممکن، احتمالاً کد ذیر را خواهید داشت:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
طبیعتاً باید سرعت و بیت توازن و توقف و... را بسته به تنظیمات میکرو تان ست کنید.
بسته های زیر مرتبط با سوال شما نیست ولی هر کدام را دانلود کنید، شامل فایل dll مورد نظر می باشد.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
و...

==============

اگر هم خواستید از dll فوق استفاده نکنید باید یک تابع مشابه FromHexString به کدتان اضافه کنید که هر یک کاراکتر را در قالب یک نیبل به دست آورده و از هر دو کاراکتر پس از 4 بیت شیفت یک بایت تشکیل دهید.

موفق باشید.