首頁 >後端開發 >C++ >如何在 C 中有效地將十六進位字串轉換為有符號整數?

如何在 C 中有效地將十六進位字串轉換為有符號整數?

Patricia Arquette
Patricia Arquette原創
2024-12-30 18:27:10166瀏覽

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

在C 中將十六進位字串轉換為有符號整數

將十六進位字串轉換為有符號整數是程式設計中的常見任務。在 C 中,您可以使用各種方法來有效地完成此轉換。

一種方法涉及使用 std::stringstream。這種方法允許您將十六進位字串解析為流並將其轉換為以二進位格式表示的無符號整數。要處理正負有符號整數,您可以使用static_cast 將結果明確轉換為有符號類型:

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

在較新的C 11 標準中,您可以使用「字串來編號「 像std::stoul這樣的轉換函數可以簡化這個流程流程:

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

注意:上述解決方案要求輸入的十六進位字串必須使用「0x」前綴進行格式化,以表明它是十六進制。

另一種方法涉及使用 Boost 函式庫。 Boost 提供了像boost::lexical_cast 這樣的實用程序,它可以無縫處理十六進位到整數的轉換:

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

對於沒有錯誤檢查的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;
}

使用此函數,可以轉換不含「0x」的十六進位字串prefix:

unsigned int x = lexical_cast<unsigned int>("deadbeef");

透過了解這些方法,您可以在各種用例下有效地將十六進位字串轉換為C 中的帶符號整數,確保資料轉換準確可靠。

以上是如何在 C 中有效地將十六進位字串轉換為有符號整數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn