Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menukar Rentetan Heksadesimal dengan Cekap kepada Integer Bertanda dalam C?

Bagaimanakah Saya Boleh Menukar Rentetan Heksadesimal dengan Cekap kepada Integer Bertanda dalam C?

Patricia Arquette
Lepaskan: 2024-12-30 18:27:10
asal
150 orang telah melayarinya

How Can I Efficiently Convert Hexadecimal Strings to Signed Integers in C  ?

Menukar Rentetan Heksadesimal kepada Integer Bertanda dalam C

Menukar rentetan perenambelasan kepada integer bertanda ialah tugas biasa dalam pengaturcaraan. Dalam C , anda boleh menggunakan pelbagai kaedah untuk mencapai penukaran ini dengan cekap.

Satu kaedah melibatkan penggunaan std::stringstream. Pendekatan ini membolehkan anda menghuraikan rentetan perenambelasan sebagai aliran dan menukarnya kepada integer tidak bertanda yang diwakili dalam format binari. Untuk mengendalikan kedua-dua integer bertanda positif dan negatif, anda boleh menggunakan static_cast untuk menghantar hasil secara eksplisit kepada jenis yang ditandatangani:

unsigned int x;
std::stringstream ss;
ss << std::hex << "fffefffe";
ss >> x;
std::cout << static_cast<int>(x) << std::endl; // Output: -65538
Salin selepas log masuk

Dalam standard C 11 yang lebih baharu, anda boleh menggunakan "rentetan ke nombor " fungsi penukaran seperti std::stoul untuk menyelaraskan ini proses:

std::string s = "0xfffefffe";
unsigned int x = std::stoul(s, nullptr, 16);
std::cout << x << std::endl; // Output: 4294967022
Salin selepas log masuk

NOTA: Penyelesaian di atas memerlukan rentetan perenambelasan input diformatkan dengan awalan "0x" untuk menunjukkan ia heks.

Kaedah lain melibatkan penggunaan pustaka Boost. Boost menyediakan utiliti seperti boost::lexical_cast, yang mengendalikan penukaran hex-to-integer dengan lancar:

try {
    unsigned int x = boost::lexical_cast<unsigned int>("0xdeadbeef");
} catch (boost::bad_lexical_cast &) {
    // Handle error scenario
}
Salin selepas log masuk

Untuk versi ringan lexical_cast tanpa semakan ralat, anda boleh melaksanakan sesuatu seperti ini:

template<typename T2, typename T1>
inline T2 lexical_cast(const T1& in) {
    T2 out;
    std::stringstream ss;
    ss << in;
    ss >> out;
    return out;
}
Salin selepas log masuk

Menggunakan fungsi ini, anda boleh menukar rentetan heksadesimal tanpa "0x" awalan:

unsigned int x = lexical_cast<unsigned int>("deadbeef");
Salin selepas log masuk

Dengan memahami kaedah ini, anda boleh menukar rentetan perenambelasan secara berkesan kepada integer bertanda dalam C untuk pelbagai kes penggunaan, memastikan penukaran data yang tepat dan boleh dipercayai.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukar Rentetan Heksadesimal dengan Cekap kepada Integer Bertanda dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan