我想知道为什么在将十六进制字符串 (0x1) 转换为 uint8 时得到 0 的结果。
我尝试使用boost::lexical_cast
,但出现bad_lexical_cast
异常。因此,我决定改用 astringstream
但我得到的值不正确。
...
uint8_t temp;
std::string address_extension = "0x1";
std::cout << "Before: " << address_extension << std::endl;
StringToNumeric(address_extension, temp);
std::cout << "After: " << temp << std::endl;
...
template <typename T>
void StringToNumeric(const std::string& source, T& target)
{
//Check if source is hex
if(IsHexNotation(source))
{
std::stringstream ss;
//Put value in the stream
ss << std::hex << source;
//Stream the hex value into a target type
ss >> target;
}
}
您可以放心,它IsHexNotation()
可以正常工作并且不会更改声明的源:
bool IsHexNotation(const std::string& source)
将十六进制字符串转换为 uint8 的正确方法是什么(假设十六进制字符串将适合数据类型)?