十六进制的字符串流>> uint8_t?C++
stringstream >> uint8_t in hex? c++
我对以下代码的输出感到困惑:
uint8_t x = 0, y = 0x4a;
std::stringstream ss;
std::string a = "4a";
ss << std::hex << a;
ss >> x;
std::cout << (int)x << " "<< (int)y << std::endl;
std::cout << x << " "<< y <<std::endl;
std::cout << std::hex << (int)x << " " << (int)y << std::endl;
uint8_t z(x);
std::cout << z;
上面的输出是:
52 74 4 J34 44
,当我们改变时,用
替换第一行uint16_t x = 0, y = 0x4a;
输出变成:
74年74
74年74
4 4 J我想我明白发生了什么,但我不明白为什么会发生,或者我如何预防它/解决它。根据我的理解,std::hex
修饰符由于x
的类型而在某种程度上被破坏了,也许在技术层面上不完全正确,但它只是写了它读到的第一个字符。
背景:输入应该是一个十六进制数字字符串,每对代表一个字节(就像位图一样,只是在字符串中)。我希望能够读取每个字节并将其存储在uint8_t
中,所以当我遇到这个问题时,我正在进行实验。我仍然不能确定什么是最好的方法,所以如果你认为我所做的是低效或不必要的,我会很感激知道为什么。谢谢你的阅读,
ss >> x
将uint8_t x视为unsigned char。'4'的ascii值是(十进制)52。它将字符串"4a"的第一个字符读入x,就好像x是一个字符一样。当你切换到uint16_t时,它将其视为无符号短整数类型。
相关文章:
- EASTL矢量<向量<int>>连续的
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- C 字符串比较“祝您好运”&gt;“再见”
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- C 操作员&gt;&gt;与突变器过载
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 是否需要使用 - &gt;运算符在C 中调用成员函数时
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- 错误c++visual studio c2227左侧'->;Init';必须指向类/结构/联合/泛型类型
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- ``这个''不能用this-&gt;指针变量
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在
- 使用shared_ptr<字符串>转换为一个无序集合<字符串>
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到