Я хотел бы знать, почему я получаю результат 0 при преобразовании шестнадцатеричной строки (0x1) в uint8.Как преобразовать шестнадцатеричную строку в Uint8
Я пытался использовать boost::lexical_cast
, но получаю исключение bad_lexical_cast
. Поэтому я решил использовать stringstream
, но я получаю неправильное значение.
...
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 (при условии, что hex string Вписывается в тип данных)?
Hex - это * представление * числового значения, равно как десятичные или римские цифры. Вы * форматируете * это или * сканируете * это, вы не * прикладываете * его. –
@HotLicks Это имеет смысл - я никогда не думал об этом таким образом (и поэтому почему лексический актер не работал - он не знал, что с ним делать!). – larrylampco