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

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

Barbara Streisand
Barbara Streisand原創
2024-12-21 06:36:14429瀏覽

How to Convert Hex Strings to Signed Integers in C  ?

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

考慮將數字的十六進位字串表示形式轉換為32 位元有符號整數的任務。例如,十六進位字串「fffefffe」轉換為二進位形式的 11111111111111101111111111111110,表示有符號整數 -65538。此外,我們需要處理正數和負數,例如「0000000A」(二進位:0000000000000000000000000001010;十進位:10)。

解決方案:利用std::stringstream

利用std: :stringstream類,轉換過程變得簡單:

unsigned int x;
std::stringstream ss;
ss << std::hex << "fffefffe";
ss >> x;

透過從流中提取整數,我們獲得十六進位字串的32 位元有符號整數表示。

替代方法

Boost 的lexical_cast:處理錯誤(已停止)

注意:如來源答案所示,Boost 的lexical_cast 方法已已停止,轉而支援較新的C 11 函數。

Boost 也提供了一個方便的解決方案,其中包含錯誤檢查:

try {
    unsigned int x = lexical_cast<int>("0x0badc0de");
} catch(bad_lexical_cast &amp;) {
    // Handle conversion error
}

自訂lexical_cast:簡單實作無錯誤檢查

對於那些不使用Boost 的人,可以使用lexical_cast的簡化版本,無需錯誤處理:

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

unsigned int x = lexical_cast<unsigned int>("0xdeadbeef");

結論

使用std::stringstream或較新的C 11 實用程式(例如std::stol),開發人員可以有效地將十六進位字串轉換為C 中的有符號整數.

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

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