16 進文字列 (0x1) を uint8 に変換するときに結果が 0 になる理由を知りたいです。
使用しようとしましboost::lexical_cast
たが、bad_lexical_cast
例外が発生します。したがって、stringstream
代わりに a を使用することにしましたが、間違った値を取得しています。
...
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)
16 進文字列を uint8 に変換する正しい方法は何ですか (16 進文字列がデータ型に収まる場合)?