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

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

Susan Sarandon
Susan Sarandon原創
2024-12-28 13:03:12520瀏覽

How Can I Convert a Hex String to a Signed Integer in C  ?

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

許多情況需要將十六進位字串轉換為C 中的有符號整數。例如,您可能有一個像“fffefffe”這樣的十六進位字串,表示二進位值 11111111111111101111111111111110,對應於有符號整數 -65538。

使用 std::stringstream 的解

一種實作方法此轉換涉及使用std::stringstream:

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

非負數

要處理非負數,您可以使用以下範例:

#include <sstream>
#include <iostream>

int main() {
    unsigned int x;   
    std::stringstream ss;
    ss << std::hex << "0000000A";
    ss >> x;
    std::cout << static_cast<int>(x) << std::endl;
}

這將產生10作為結果,這對於十六進位字串是正確的"0000000A".

C 11 字串轉數字函數

在C 11 中,您可以使用字串轉數字函數,例如std::stoul:

std::string s = "0xfffefffe";
unsigned int x = std::stoul(s, nullptr, 16);

其他方法

或者,您可以利用Boost 等庫,它提供lexical_cast 等功能:

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

滾動您自己的lexical_cast

如果您喜歡沒有依賴關係的更簡單的方法,您可以使用自訂實作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"); 

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

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