ব্যবহার std::stringstream
unsigned int x;
std::stringstream ss;
ss << std::hex << "fffefffe";
ss >> x;
নিম্নলিখিত উদাহরণটি -65538
তার ফলাফল হিসাবে উত্পাদন করে :
#include <sstream>
#include <iostream>
int main() {
unsigned int x;
std::stringstream ss;
ss << std::hex << "fffefffe";
ss >> x;
// output it as a signed type
std::cout << static_cast<int>(x) << std::endl;
}
নতুন সি ++ 11 স্ট্যান্ডার্ডে, কয়েকটি নতুন ইউটিলিটি ফাংশন রয়েছে যা আপনি ব্যবহার করতে পারেন! বিশেষত, "স্ট্রিং টু নাম্বার" ফাংশনগুলির একটি পরিবার রয়েছে ( http://en.cppreferences.com/w/cpp/string/basic_string/stol এবং http://en.cppreferences.com/w/cpp/string/ বেসিক_স্ট্রিং / স্টুল )। এগুলি সি এর স্ট্রিংয়ের সাথে সংখ্যার রূপান্তর ফাংশনগুলির চারপাশে মূলত পাতলা মোড়ক রয়েছে তবে কীভাবে কীভাবে ডিল করতে হয় তা জানেনstd::string
সুতরাং, নতুন কোডের সহজ উত্তরটি সম্ভবত এটির মতো দেখাবে:
std::string s = "0xfffefffe";
unsigned int x = std::stoul(s, nullptr, 16);
বিঃদ্রঃ: নীচে আমার মূল উত্তরটি দেওয়া হয়েছে, যা সম্পাদনা হিসাবে সম্পূর্ণ উত্তর নয়। কার্যক্ষম সমাধানের জন্য, কোডটি :-) রেখার উপরে চাপুন stick
এটি প্রদর্শিত হয় যেহেতু lexical_cast<>
স্ট্রিম রূপান্তর শব্দার্থবিজ্ঞানের সংজ্ঞা দেওয়া হয়েছে। দুঃখের বিষয়, স্ট্রিমগুলি "0x" স্বরলিপি বুঝতে পারে না। সুতরাং boost::lexical_cast
এবং আমার হাত ঘূর্ণিত উভয়ই হেক্স স্ট্রিংগুলির সাথে ভাল ব্যবহার করে না। উপরের সমাধানটি যা ম্যানুয়ালি ইনপুট স্ট্রিমটিকে হেক্সে সেট করে তা ঠিকঠাকভাবে পরিচালনা করবে।
বুস্টের এটি করার জন্য কিছু স্টাফ রয়েছে , এতে দক্ষতা যাচাই করার জন্য কিছু চমৎকার ত্রুটি রয়েছে। আপনি এটি এর মতো ব্যবহার করতে পারেন:
try {
unsigned int x = lexical_cast<int>("0x0badc0de");
} catch(bad_lexical_cast &) {
// whatever you want to do...
}
যদি আপনি বুস্ট ব্যবহার করার মতো মনে করেন না, তবে এখানে লেক্সিকাল কাস্টের একটি হালকা সংস্করণ রয়েছে যা পরীক্ষা করতে কোনও ত্রুটি করে না:
template<typename T2, typename T1>
inline T2 lexical_cast(const T1 &in) {
T2 out;
std::stringstream ss;
ss << in;
ss >> out;
return out;
}
যা আপনি এটির মতো ব্যবহার করতে পারেন:
// though this needs the 0x prefix so it knows it is hex
unsigned int x = lexical_cast<unsigned int>("0xdeadbeef");