সঠিক ভাবে একটি রূপান্তর করতে কি charকরতে int? এটি দেয় 49:
int val = Convert.ToInt32('1');
//int val = Int32.Parse("1"); // Works
আমি স্ট্রিংয়ে রূপান্তর করতে চাই না এবং তারপরে পার্স করতে চাই।
সঠিক ভাবে একটি রূপান্তর করতে কি charকরতে int? এটি দেয় 49:
int val = Convert.ToInt32('1');
//int val = Int32.Parse("1"); // Works
আমি স্ট্রিংয়ে রূপান্তর করতে চাই না এবং তারপরে পার্স করতে চাই।
উত্তর:
আমি আশ্চর্য হয়েছি যে কেউ স্থির পদ্ধতিটি ঠিক এর মধ্যে নির্মিত হয়নি System.Char...
int val = (int)Char.GetNumericValue('8');
// val == 8
double, যদিও
Char.GetNumericValue('⅓')আসলেই ফিরে আসে 0.3333...। যে ইশারা জন্য ধন্যবাদ!
কিভাবে (জন্য char c)
int i = (int)(c - '0');
চরের মানটির বিয়োগফল কোনটি?
এপিআই প্রশ্ন (মন্তব্য), সম্ভবত একটি এক্সটেনশন পদ্ধতি পুনরায়?
public static class CharExtensions {
public static int ParseInt32(this char value) {
int i = (int)(value - '0');
if (i < 0 || i > 9) throw new ArgumentOutOfRangeException("value");
return i;
}
}
তারপরে ব্যবহার করুন int x = c.ParseInt32();
int.Parse, অর্থাত্ যদি কোনও ব্যতিক্রম অবৈধ ইনপুটটিতে ফেলে দেওয়া হয় তবে আপনাকে অতিরিক্ত সীমানা যাচাই করতে হবে:if (i < 0 || i > 9) throw new FormatException();
প্রত্যেকে যা ভুলে যাচ্ছেন তা ব্যাখ্যা করছে যে এটি কেন হয়।
একটি চর মূলত একটি পূর্ণসংখ্যা, তবে ASCII সারণীতে একটি পয়েন্টার সহ। সমস্ত অক্ষরের একটি যথাযথ পূর্ণসংখ্যার মান রয়েছে কারণ এটি বিশ্লেষণ করার চেষ্টা করার সময় আপনি স্পষ্ট দেখতে পাচ্ছেন।
প্রাণয়ের স্পষ্টতই একটি আলাদা চরিত্র সেট রয়েছে, তার এইচএস কোড কেন কাজ করে না তা জানায়। একমাত্র উপায়
int val = '1' - '0';
কারণ এটি সারণীতে পূর্ণসংখ্যার মানটি দেখায় '0'যা তারপরে 'বেস মান' এটি থেকে আপনার নম্বরটি চর বিন্যাসে বিয়োগ করলে আপনাকে আসল নম্বর দেবে।
আপনি নিম্নলিখিত এক্সটেনশন পদ্ধতিটি ব্যবহার করতে পারেন:
public static class CharExtensions
{
public static int CharToInt(this char c)
{
if (c < '0' || c > '9')
throw new ArgumentException("The character should be a number", "c");
return c - '0';
}
}
charকরতে intহয় তবে আমাদের ইনপুট প্যারামিটারের পরিসর পরীক্ষা করতে হবে, আউটপুট intমানটি নয়।
intমানটি পরীক্ষা করার দরকার নেই কারণ পদ্ধতির শুরুতে সংখ্যার চরগুলির পরিসীমা সম্পাদিত হয়েছিল, সুতরাং সঠিক ফলাফলের মানটি থাকবে, যদি নির্দিষ্ট চরটি সংখ্যা বর্ণের পরিসরে না থাকে তবে সেখানে ফেলে দেওয়া ব্যতিক্রম হবে। আপনি সরবরাহ করেছেন কিন্তু রেঞ্জ চেক হিসাবে একই যুক্তিটি পদ্ধতিটির শুরুতে সঞ্চালিত হয়।
if (c < 0 || c > 9)...
এটি সম্পাদন করার সর্বাধিক সুরক্ষিত উপায় হ'ল আন্ত32 T ট্রাইপার্স পদ্ধতিটি। এখানে দেখুন: http://dotnetperls.com/int-tryparse
int val = '1' & 15;
ASCII অধ্যায়ের 0-9 এর বাইনারিটি হ'ল:
0 - 00110000
1 - 00110001
2 - 00110010
3 - 00110011
4 - 00110100
5 - 00110101
6 - 00110110
7 - 00110111
8 - 00111000
9 - 00111001
এবং যদি আপনি তাদের প্রত্যেকটির মধ্যে প্রথম 4 টি এলএসবি নেন (বিটওয়াইড এবং 8'b00001111 যা 15 এর সমান হয়) ব্যবহার করে আপনি আসল নম্বর পাবেন (0000 = 0,0001 = 1,0010 = 2, ...)
হেক্সাডেসিমাল উপস্থাপনা কভার করে এমন কিছু অন্যান্য উত্তরের একটি বর্ধন:
public int CharToInt(char c)
{
if (c >= '0' && c <= '9')
{
return c - '0';
}
else if (c >= 'a' && c <= 'f')
{
return 10 + c - 'a';
}
else if (c >= 'A' && c <= 'F')
{
return 10 + c - 'A';
}
return -1;
}