قبلا در رابطه با تبدیل متن به کد اسکی توی این پست توضیح داده بودیم اما توی این پست میخوایم برنامه ای بنویسیم که کد های اسکی رو به متن تبدیل کنه و کنارش یه خطای برنامه نویسی رو حل کنیم که کل اینها به زبان سی شارپ خواهد بود
چند روز پیش داشتم روی اینکد کردن کدهای اسکی کار میکردم که خواستم یه برنامه بنویسم تا کدهای اسکی رو به کارکتر تبدیل کنه ، نوشتن این برنامه تو پایتون خیلی سادست اما از اونجایی که چند وقته دارم سی شارپ کار میکنم و یجورایی میخوام رابطم با سی شارپ خوب بشه :) بخاطر همین زد به سرم که این برنامه رو به زبان سی شارپ بنویسم تا هم نمای برنامم یه نمه خوشگل بشه و هم ... اما همین خوشگلی یه خرده مشکلات برای من پیش آورد که از ویروس کمک گرفتم و اون مشکل رو حلش کردیم و تو این پست اول مشکله رو + علتش میگم و بعدا میریم سراغ نوشتن برنامه ای برای اینکد کردن کدهای اسکی ; شاید یه خرده پستمون طولانی باشه که اگه حوصلتون نکشید برین سراغ بخش اصلیش یعنی درست کردن برنامه
وقتی که تو نت میچرخیدم یه تکه کد پیدا کردم برای اینکه بتونم عملیات اینکد رو انجام بدم اما مشکلاتی که داشت این بود که اولا برای محیط کنسول بود و رابط گرافیکی نداشت و دوم اینکه اگه میخواستیم یه کدی رو اینکد کنم باید حتما تو محیط کدنویسی مینوشتم ، سر همین موضوع یه نمه تغییرش دادم و خواستم که تو محیط گرافیکی همچین برنامه ای رو بنویسم سر همین کدارو کپی کردم داخل محیط گرافیکی و یه چند تا چیز میز به فرم اضافه کردم تا برم سراغ کدها ، بعدا که کدهارو یه خرده تغییر دادم تونستم کارکتر رو از کد اسکی بیرون بکشم و روی تکست باکس نشون بدم اما یه بدی که داشت این بود که مجدد باید کد اسکی رو داخل محیط کدنویسی وارد میکردم و تنها فرقی که کرده بود این بود که اومده بود تو رابط گرافیکی
یه پروژه به زبان سی شارپ استارت کنین و یدونه textBox و یدونه Button اضافه کنین تا بریم سراغ بررسی کدهایی که من نوشته بودم ، بعد از اوکی کردن مواردی که گفتم روی Button دوبار کلیک کنین تا برین داخل محیط کد نویسی بعدا کدای پایین رو کپی کنین داخلش
var asciiBytes = new byte[] { 86,105,114,117,115,51,50 };
var text = System.Text.Encoding.ASCII.GetString(asciiBytes);
textBox1.Text = text;
خب اگه پروژه رو اجرا کنین ، با زدن دکمه ای که داخل برنامه گذاشتین ، متن تکست باکس عوض میشه به Virus32 که بخاطر همین عدد های داخل آکولاد هستش که بهشون کد اسکی گفته میشه ، خب حالا که این کدهارو بررسی کردیم بریم سراغ یه کد دیگه حالا یه textBox دیگه هم به به فرم اضافه کنین و مجدد دوبار روی دکمه ی روی فرم کلیک کنین تا وارد بخش کد نویسی بشین و بعد از پاک کردن کد قبلی کدهای پایین رو اضافه کنین
var asciiBytes = new byte[] {textBox1.Text};
var text = System.Text.Encoding.ASCII.GetString(asciiBytes);
textBox2.Text = text;
در واقع این کدیه که من برای خودم نوشته بودم تا وقتی کد اسکی رو داخلش تکست باکس یک گذاشتم و دکمه رو زدم تکست باکس دو تبدیل بشه به کارکترای مورد نظرم ، اما وقتی کدهارو کپی کنین بهتون ارور میده که به شرح زیر هستش :)
Cannot implicitly convert type 'string' to 'byte'
حالا این ارور بخاطر چی هستش ؟
تو خط اول ما باید یدونه آرایه تعریف میکردیم و روی اون آرایه حرکت میکردیم و عملیات اینکد رو انجام میدادیم تا به آخرین کد اسکی که با , جدا شده برسیم
بعد اینکه تو خط دوم ما بجای آرایه یدونه شی ء ساختیم که اینکار کار درستی نیستش و باعث میشه که ارور ما ایجاد بشه
حالا بریم سراغ ساخت برنامه ی اصلی
نیازی نیست پروژه جدید ایجاد کنین و خودتونو خسته کنین ، فقط یدونه textBox دیگه به پروژه قبلی اضافه کنین که جمعا میشه سه تا textBox و یدونه هم Button ، حالا روی دکمه دابل کلیک کنین و کدهای پایین رو توی اون اضافه کنین تا بریم سراغ توضیحات کد ها
char virus32;
if (textBox1.Text != string.Empty)
{
string[] x = textBox1.Text.Split(new Char[] {','});
foreach (string y in x)
{
if (y.Trim() != "")
{
textBox3.Text = y.ToString();
virus32 = (char)Convert.ToInt32(textBox3.Text );
textBox2.Text = textBox2.Text + virus32.ToString();
}
}
}
خب توضیحات کدها به این شرحه که تو خط اول یه متغیر با اسم virus32 تعریف کردیم که از نوع کارکتر یا همون char هستش ، بعدا گفتیم که اگر متن تکست باکس یک خالی نبود ، یدونه آرایه با اسم x درست کن و متن تکست باکس یک رو شکاف بده تا برسی به مجموعه ای که " , " ختم بشه
بعدا با استفاده از حلقه ی foreachبه خونه های داخل آرایه دسترسی پیدا کردیم ، حالا این دستور foreach چی هستش ؟ تو زبان سی شارپ، زمانی که ما یه آرایه تعریف می کنیم، در حقیقت یک مجموعه قابل شمارش (Enumerable) تعریف کردیم که توی دات نت مجموعه های قابل شمارش زیادی وجود داره ، اما منظور از قابل شمارش چی هستش ؟ نوع های قابل شمارش، نوع هایی هستن که ما می تونیم بوسیله دستور foreach به خانه های آنها دسترسی داشته باشیم ، خب برگردیم سراغ ادامه ی توضیحات ، بعدا توی همون حلقه یه شرط گذاشتیم و خروجیه حلقمون رو که y هستش پاکسازی کردیم ، یه پرانتز اینجا باز کنم و نحوه ی کار رو بگم تا بریم سراغ ادامه ی توضیحات تا گیج نشین ، نحوه ی کار برنامه به این شکل هستش که کدهای اسکیی رو که با " , " جدا شدن رو میریزیم تو تکست باکس سه و از روی اون اینکد میکنیم و میریزیم داخل تکست باکس دوم و این ترتیب ادامه داره تا به آخری برسه بخاطر همین وقتی که به آخرین کد اسکی که با " , " جدا شده میرسیم ، توی تکست باکس سوم باقی میمونه ، خب دو خط دوم رو هم بگم که ما تکست باکس سه رو متنشو تبدیل کردیم به نوع داده int یا عدد صحیح بعدا تکست باکس دوم رو برابر کردیم با متغیر virus32 که به رشته تبدیل شده
اینم یه تصویر از محیط برنامه که اگه واضح نبود روش کلیک کنین
موفق باشید
میگم حالا که میونت با سی شارپ خوب شده میشه اگه وقت داشتی یه آموزشم درباره ی ساخت کرکر با سی شارپ بزاری ؟؟؟؟