如何解决为什么只有与int变量一起使用时std cin才能工作? 使用uint8_t或unsigned char:将char[N]与std::hex一起使用
一段时间后,我尝试使用std :: cin。
使用uint8_t
或unsigned char
:
unsigned char data;
std::cin >> std::dec >> data;
无论是否使用std::dec
,我都会得到键入的第一个ASCII字符。
如果输入12
,则数据为0x31
而不是12
。为什么不能解析数字直到255
才能存储在char
中?
int data;
std::cin >> std::dec >> data;
正确地提供 data=12/0xC
而不是0x31
- 为什么?
将char[N]
与std::hex
一起使用
char data[128];
std::cin >> std::hex >> data;
还获取ASCII字符而不是十六进制。
-
写入
0x010203040506...
的数据是0xFFFFFFFFF..
。 -
std::cin>>std::hex
不能自动将我键入的字符串解析为十六进制吗?
解决方法
简而言之:
-
cin >> charVar
从stdin
扫描单个字符 -
cin >> intVar
扫描stdin
中的字符,直到输入了非数字字符为止
解释您的观察结果:
char
变量可以存储一个ASCII字符。
键入12
时,仅扫描字符1
。
字符1
的ASCII码是0x31
。
std::dec
和std::hex
影响整数的格式。
但是就流操作符而言,char
及其变体(包括uint8_t
不是整数,它们是单个字符。它们将始终读取单个字符,并且从不解析整数。
这就是这些函数的定义方式。没有其他办法了。如果要使用范围有限的整数,请先读入int
(或不是char
变体的其他整数类型),然后再进行范围检查。如果需要,可以将其转换为较小的类型,但是您可能不应该这样做。 char
类型很难在数字上使用。
类似地,读入char
数组将读取一个字符串。 (此外,永远不要在不使用setw()
限制长度以适合缓冲区的情况下这样做。更好的是,使用std::string
。)这就是它的定义方式。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。