我想对存储在stringstream对象中的数据使用按位取反。以下代码可以正常工作:
std::uint8_t x = 0x01;
x = ~x;
std::stringstream buf;
buf << x;
std::string data = buf.str();
std::cout << std::hex << static_cast<int>(data[0]) << std::endl;
//result: fffffffe
Run Code Online (Sandbox Code Playgroud)
当我以这种方式使用按位求反时:
std::uint8_t x = 0x01;
std::stringstream buf;
buf << ~x;
std::string data = buf.str();
std::cout << std::hex << static_cast<int>(data[0]) << std::endl;
//result: 0x2d
Run Code Online (Sandbox Code Playgroud)
我得到了意外的结果。怎么解释呢?如何与运算符<<一起使用按位求反?
的结果~x不是类型std::uint8_t。您可以使用
std::uint8_t x = 0x01;
std::stringstream buf;
buf << static_cast<std::uint8_t>(~x);
std::string data = buf.str();
std::cout << std::hex << static_cast<int>(data[0]) << std::endl;
//result: 0x2d
Run Code Online (Sandbox Code Playgroud)
的结果~x是-2。因此data[0]是-带有ASCII码的 字符45 = 0x2d。而是之后
x = ~x;
Run Code Online (Sandbox Code Playgroud)
x包含þ具有ASCII值的值254 = 0xfe。
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |