Tukar Rentetan Hex kepada Integer Bertanda dalam C
Banyak situasi memerlukan penukaran rentetan perenambelasan kepada integer bertanda dalam C . Sebagai contoh, anda mungkin mempunyai rentetan heks seperti "fffefffe" yang mewakili nilai perduaan 11111111111111101111111111111110, yang sepadan dengan integer yang ditandatangani -65538.
Penyelesaian Menggunakan std::stringstream
Satu pendekatan untuk mencapai penukaran ini melibatkan penggunaan std::stringstream:
unsigned int x; std::stringstream ss; ss << std::hex << "fffefffe"; ss >> x;
Nombor Bukan Negatif
Untuk mengendalikan nombor bukan negatif, anda boleh menggunakan yang berikut contoh:
#include <sstream> #include <iostream> int main() { unsigned int x; std::stringstream ss; ss << std::hex << "0000000A"; ss >> x; std::cout << static_cast<int>(x) << std::endl; }
Ini akan menghasilkan 10 sebagai hasilnya, yang betul untuk rentetan hex "0000000A".
C 11 Fungsi Rentetan-ke-Nombor
Dalam C 11, anda boleh menggunakan fungsi rentetan ke nombor seperti std::stoul:
std::string s = "0xfffefffe"; unsigned int x = std::stoul(s, nullptr, 16);
Pendekatan Lain
Sebagai alternatif, anda boleh memanfaatkan perpustakaan seperti Boost, yang menawarkan fungsi seperti lexical_cast:
unsigned int x = boost::lexical_cast<int>("0x0badc0de");
Menggelek Sendiri lexical_cast
Jika anda lebih suka pendekatan yang lebih mudah tanpa kebergantungan, anda boleh menggunakan pelaksanaan tersuai bagi lexical_cast:
template<typename T2, typename T1> inline T2 lexical_cast(const T1 &in) { T2 out; std::stringstream ss; ss << in; ss >> out; return out; } unsigned int x = lexical_cast<unsigned int>("0xdeadbeef");
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukar Rentetan Hex kepada Integer Bertanda dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!