উত্তর:
অন্যান্য জবাব অনুসারে, এটি ঠিক আছে:
char c = '5';
int x = c - '0';
এছাড়াও, ত্রুটি পরীক্ষা করার জন্য, আপনি প্রথমে isdigit (সি) পরীক্ষা করতে চাইতে পারেন। নোট করুন যে আপনি সম্পূর্ণরূপে অক্ষরের জন্য একইভাবে করতে পারবেন না, উদাহরণস্বরূপ:
char c = 'b';
int x = c - 'a'; // x is now not necessarily 1
স্ট্যান্ডার্ডটি গ্যারান্টি দেয় যে '0' থেকে '9' ডিজিটের জন্য চর মানগুলি সামঞ্জস্যপূর্ণ তবে বর্ণের অক্ষরের মতো অন্যান্য অক্ষরের জন্য কোনও গ্যারান্টি দেয় না।
'0' এর মতো বিয়োগ করুন:
int i = c - '0';
সি স্ট্যান্ডার্ড গ্যারান্টী বা নিশ্চয়তা দিচ্ছে সীমার মধ্যে প্রতিটি অঙ্ক '0'..'9'
তার পূর্ববর্তী অঙ্ক (বিভাগে থেকেও মহান কিছু 5.2.1/3
এর C99 খসড়া )। সি ++ এর জন্য একই গণনা।
যদি কোনও ক্রেজি কাকতালীয়ভাবে আপনি অক্ষরের একটি স্ট্রিংকে একটি পূর্ণসংখ্যায় রূপান্তর করতে চান , আপনি এটিও করতে পারেন!
char *num = "1024";
int val = atoi(num); // atoi = ASCII TO Int
val
এখন 1024. স্পষ্টতই atoi()
ভাল, এবং আমি এটি সম্পর্কে যা বলেছিলাম তা কেবলমাত্র আমার ক্ষেত্রে প্রযোজ্য (ওএস এক্সে (সম্ভবত (এখানে লিস্পের রসিকতা সন্নিবেশ করুন)))। আমি শুনেছি এটি একটি ম্যাক্রো যা পরের উদাহরণে মোটামুটি মানচিত্র strtol()
করে, পরিবর্তে রূপান্তরটি করার জন্য এটি আরও সাধারণ-উদ্দেশ্যমূলক ফাংশন ব্যবহার করে:
char *num = "1024";
int val = (int)strtol(num, (char **)NULL, 10); // strtol = STRing TO Long
strtol()
এই মত কাজ করে:
long strtol(const char *str, char **endptr, int base);
এটি একটিতে রূপান্তর *str
করে long
, এমন চিকিত্সা করে যেন এটি কোনও বেস base
নম্বর। যদি **endptr
শূন্য না হয় তবে এটি প্রথম strtol()
পাওয়া অ-অঙ্কের অক্ষর ধারণ করে (তবে কে এটি সম্পর্কে চিন্তা করে)।
itoa_s()
।
চর '0' বা int 48 এর মতো বিয়োগ করুন:
char c = '5';
int i = c - '0';
ব্যাখ্যা: অভ্যন্তরীণভাবে এটি ASCII মানের সাথে কাজ করে । ASCII টেবিল থেকে, 5 অক্ষরের দশমিক মান 53 এবং 0 48 হয় । সুতরাং 53 - 48 = 5
অথবা
char c = '5';
int i = c - 48; // Because decimal value of char '0' is 48
এর অর্থ আপনি যদি কোনও সংখ্যার চরিত্র থেকে 48 কেটে নেন তবে এটি স্বয়ংক্রিয়ভাবে পূর্ণসংখ্যাকে রূপান্তর করবে।
char numeralChar = '4';
int numeral = (int) (numeralChar - '0');
numeralChar - '0'
ইতিমধ্যে টাইপ করা হয়েছে int
, তাই আপনার অভিনেতার দরকার নেই। এমনকি এটি না হলেও, কাস্টের প্রয়োজন হয় না।
অক্ষরের অঙ্কটিকে সংশ্লিষ্ট পূর্ণসংখ্যায় রূপান্তর করতে। নীচে প্রদর্শিত হিসাবে করুন:
char c = '8';
int i = c - '0';
উপরের গণনার পিছনে যুক্তি হ'ল ASCII মানগুলির সাথে খেলা। 8-এর অক্ষরের ASCII মান 56, 0 বর্ণের ASCII মান 48 AS পূর্ণসংখ্যার ASCII মান 8 হয়।
আমরা যদি দুটি অক্ষর বিয়োগ করি তবে অক্ষরের ASCII এর মধ্যে বিয়োগ ঘটে।
int i = 56 - 48;
i = 8;
যদি এটি ASCII- এ কেবল একটি একক অক্ষর 0-9 হয়, তবে ASCII মান থেকে ASCII শূন্য বর্ণের মান বিয়োগ করা ভাল কাজ করা উচিত।
আপনি যদি আরও বড় সংখ্যায় রূপান্তর করতে চান তবে নীচেরগুলি এটি করবে:
char *string = "24";
int value;
int assigned = sscanf(string, "%d", &value);
** স্ট্যাটাসটি পরীক্ষা করতে ভুলবেন না (উপরের ক্ষেত্রে এটি যদি কাজ করে তবে 1 হওয়া উচিত)।
পল।
যখন আমাকে এর মতো কিছু করার দরকার হয় তখন আমি যে মানগুলি চাই সেগুলি দিয়ে প্রেরণ করি ake
const static int lookup[256] = { -1, ..., 0,1,2,3,4,5,6,7,8,9, .... };
তাহলে রূপান্তরটি সহজ is
int digit_to_int( unsigned char c ) { return lookup[ static_cast<int>(c) ]; }
এটি মূলত সিটিপি লাইব্রেরির অনেকগুলি প্রয়োগের দ্বারা গৃহীত পদ্ধতি। আপনি হেক্স অঙ্কের সাথেও কাজ করতে তুচ্ছভাবে এটি খাপ খাইয়ে নিতে পারেন।
যদি আপনার অঙ্কটি হয়, বলুন, '5'
ASCII এ এটি বাইনারি সংখ্যা 0011 0101
(53) হিসাবে উপস্থাপিত হয় । প্রতিটি 0011
অঙ্কে সর্বাধিক চার বিট থাকে এবং সর্বনিম্ন 4 বিট বিসিডিতে অঙ্কটি উপস্থাপন করে। সুতরাং আপনি ঠিক না
char cdig = '5';
int dig = cdig & 0xf; // dig contains the number 5
সর্বনিম্ন 4 বিট পেতে, বা, এটির একই কী? Asm এ এটি and
অপারেশনটি পরিবর্তে ব্যবহার করে sub
(অন্যান্য উত্তরের মতো)।
'5'
53 ( 00110101
)
এখানে সহায়ক ফাংশন যা চারকে ডিজিট রূপান্তর করতে এবং বিপরীতে রূপান্তর করতে দেয়:
int toInt(char c) {
return c - '0';
}
char toChar(int i) {
return i + '0';
}
ফাংশনটি ব্যবহার করুন: অ্যারে থেকে পূর্ণসংখ্যার জন্য atoi, অ্যারে থেকে ভাসমান প্রকারের জন্য atof; অথবা
char c = '5';
int b = c - 48;
printf("%d", b);