我想将字符串中的十六进制表示转换为unsigned char变量,如下所示:
std::stringstream ss;
uint8_t x;
ss << "1f";
ss >> std::hex >> x; // result: x = 0x31 (=49 in decimal and ='1' as char)
Run Code Online (Sandbox Code Playgroud)
显然,我假设转换会导致x = 0x1f(十进制= 31),因为0x1f小于0xff,这是可以存储在8位无符号字符中的最大值.相反的是,在转换中只使用了我的字符串的前8位.
有人可以向我解释为什么会发生这种情况以及如何解决这个问题?