2013-06-02 337 views
0

通過使用std :: hex和std :: dec,可以從字符串中解析出十六進制數並將其轉換爲C++中的十進制數。但是,如果十六進制數字被簽名呢?在C++中將十六進制十六進制字符標記爲十進制

例如下面的代碼將生成241,如果輸入「F1」爲十六進制無符號,則結果爲正確,但如果輸入爲帶符號的十六進制,則結果應爲-15。有沒有可以處理帶符號十六進制值的C++函數?

​​
+0

查找['標準:: strtol'(HTTP://en.cppreference。 com/w/cpp/string/byte/strtol)和['std :: stoi'](http://en.cppreference.com/w/cpp/string/basic_string/stol)。 –

回答

1

當你說「簽署十六進制」你的意思是,如果你是代表十六進制char的按位表示,則F1-15。然而,-15中的十六進制符號只是-F

如果你想從這個按位表示獲得-15你就必須做一些這樣的:

std::string szTest = "F1"; 
unsigned char chTest = std::stoi(szTest, nullptr, 16); 

char chTest2 = *reinterpret_cast<char*>(&chTest); 

std::cout << szTest << ": " << static_cast<int>(chTest2) << std::endl; 

return 0;