Number Recognizing
برای تشخیص اعداد درون یک String از دستور int.Parse استفاده می شود.
بعنوان مثال می توان کد های زیر را در نظر گرفت.
string Test="1234";
int Numb=int.Parse(Test);
با این کدها مقدار عددی 1234 درون متغیر عددی Numb ریخته می شود.
البته کد بالا برای زمان هایی کار خواهد کرد که متن موجود در Test فقط شامل کاراکتر های 0 تا 9 باشد. و اگر از کاراکتر دیگری استفاده شود ، برنامه پیغام خطا خواهد داد.
برای جلوگیری از پیغام خطا می توان از کد int.TryParse استفاده کرد البته با این کار فقط از بروز پیغام خطا جلوگیری می شود ولی در صورت وجود کاراکتر هایی غیر از اعداد عمل تبدیل بدرستی انجام نخواهد شد . ولی در عوض مقدار بولینی برابر با False برگردانده می شود.
به مثال های زیر توجه کنید.
string Test="1234";
int Numb=0;
bool Flag=int.TryParse(Test,Numb);
در کدهای بالا مقدار True در Flag و مقدار 1234 در Numb قرار میگیرد.
و
string Test="1234a ";
int Numb=0;
bool Flag=int.TryParse(Test,Numb);
در نتیجه کد های بالا مقدار False در Flag قرار می گیرد.
اما برای تشخیص اعداد هگزادسیمال ( Hexadecimal )باید از آرگومان دیگری نیز برای int.Parse استفاده نمود. به این صورت که آرگومان اول int.Parse باید از نوع String بوده و آرگومان دوم بیان کننده نوع اعداد موجود درون String .
برای تشخیص و پیدا کردن اعداد هگزا دسیمال درون متن ها باید عبارت زیر را بعنوان آرگومان دوم int.Parse استفاده کرد :
System.Globalization.NumberStyles.HexNumber
یعنی بصورت مثال زیر :
string Test="66";
int Numb= int.Parse(Test,
System.Globalization.NumberStyles.HexNumber
);
در نتیجه کدهای فوق ، عدد 102 که معادل دسیمال مقدار هگزادسیمال 66 است درون متغیر Numb ریخته می شود.
همچنین می توان از دستور زیر نیز استفاده کرد
Convert.ToInt32(HexValue, 16) //converting Decimal to Hexadecimal
اما برای نمایش اعداد دسیمال درون رشته ها بگونه ای که اعداد دسیمال بصورت معادل هگزادسیمال خود نمایش داده شوند باید در دستور ToString از آرگومان "x" استفاده کرد .
مثلا در دستور زیر
var n= 12345678;
textBox1.Text = n.ToString("x4");
مقدار bc614e درون متن textbox1 زیخته می شود که معادل هگزادسیمال عدد دسیمال 12345678 است.
اما شاید توجه کرده باشید که اکثر موارد اعداد هگزادسیمال بگونه ای هستند که هر دو عدد کنار هم بیان گر یک کاراکتر هستند ، در این صورا استفاده از دستورات بالا شما را به نتیجه نا مطلوب می رساند .
حال برای تشخیص کاراکتر از درون اعداد هگزا دسیمال می توان از دستورات زیر استفاده نمود :
int first = 0;
string hint1=null;
char[] temp=new char[2];
string temp1 = null;
string result = null;
int second = 0;
int j = 0;
int i = 0 ;
if (input.Length > input2.Length)
{
j = input2.Length;
}
else
{
j = input.Length;
}
for (i = 0; i < j; i += 2)
{
temp[0] = input[i];
try
{
temp[1] = input[i + 1];
}
catch { }
temp1 = temp[0].ToString()+temp[1].ToString();
first = int.Parse(temp1, System.Globalization.NumberStyles.HexNumber);
temp[0] = input2[i];
try
{
temp[1] = input2[i + 1];
}
catch (System.Exception ex)
{
}
temp1 = temp[0].ToString() + temp[1].ToString();
second = int.Parse(temp1, System.Globalization.NumberStyles.HexNumber);
if ((first ^ second) < 16)
{
result += "0" + (first ^ second).ToString("x") + " ";
}
else
{
result += (first ^ second).ToString("x") + " ";
}
}
hint = hint1;
return result;