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

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

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

How to Convert Hex Strings to Signed Integers in C  ?

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

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

解決方案:利用std::stringstream

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

1

2

3

4

unsigned int x;

std::stringstream ss;

ss << std::hex << "fffefffe";

ss >> x;

登入後複製

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

替代方法

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

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

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

1

2

3

4

5

try {

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

} catch(bad_lexical_cast &amp;) {

    // Handle conversion error

}

登入後複製

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

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

1

2

3

4

5

6

7

8

9

10

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板