c++ - 使用stringstream将0x20视为0x00

标签 c++

下面的程序将0x20写入stringstream,然后读取该值,它为0。这是为什么以及如何写入一个值,使其读取为0x20?

#include <iostream>
#include <sstream>

int main() {
  std::stringstream ss;
  ss << (char) 0x20;
  char c;
  ss >> c;
  if ( c == 0x20 ) {
    std::cout << "32";
  } else if ( c == 0 ) {
    std::cout << "0";
  } else {
    std::cout << "other";
  }
  std::cout << '\n';
}

最佳答案

默认情况下,std::stringstream>>运算符跳过写空间。并采用ASCII(一种典型的编码方式,但绝不是通用编码)。 0x20是按下键盘上的长键时得到的空格字符。

由于流上没有其他内容,因此将NUL输出到c

解决方法是引入操纵器std::noskipws;即ss >> std::noskipws >> c;读取值为0x20。

关于c++ - 使用stringstream将0x20视为0x00,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61636836/

相关文章:

c++ - 使用QTcpSocket接收终端上/下键

c++ - 将模拟类添加到 STL 容器

c++ - 如果我将分配在堆栈上的元素的指针插入 std::vector ,则其成员的值将被更改

c++ - 编译器从哪里开始读取

c++ - SQLite SQLITE_BUSY[5] 击中析构函数并使用 :memory:

c++ - C++动态链接库中的回调函数

c++ - 常量和文字之间的混淆?

c# - 从 C# 切换到 C++。有什么必读的吗?

c++ - 全局智能指针未正确清理

C++创建一个函数的 friend ?