考慮將數字的十六進位字串表示形式轉換為32 位元有符號整數的任務。例如,十六進位字串「fffefffe」轉換為二進位形式的 11111111111111101111111111111110,表示有符號整數 -65538。此外,我們需要處理正數和負數,例如「0000000A」(二進位:0000000000000000000000000001010;十進位:10)。
利用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 &) { // Handle conversion error }
自訂lexical_cast:簡單實作無錯誤檢查
對於那些不使用Boost 的人,可以使用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; } unsigned int x = lexical_cast<unsigned int>("0xdeadbeef");
使用std::stringstream或較新的C 11 實用程式(例如std::stol),開發人員可以有效地將十六進位字串轉換為C 中的有符號整數.
以上是如何在 C 中將十六進位字串轉換為有符號整數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!