我想对存储在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
当我以这种方式使用按位求反时:
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
我得到了意外的结果。怎么解释呢?如何与运算符<<?
一起使用按位求反答案 0 :(得分:5)
~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
~x
的结果为-2
。因此,data[0]
是字符-
,其ASCII码为45 = 0x2d
。而是在
x = ~x;
x
包含值þ
,其值为ASCII值254 = 0xfe
。