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

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

Barbara Streisand
發布: 2024-12-21 06:36:14
原創
425 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板