`std :: string`是否在内部将其字符存储为签名字符?

时间:2018-09-15 08:45:57

标签: c++ string

我正在编写一种算法,要求我通过一个无符号的1字节整数(0-255)将值插入std::string中,并要求我将字符串的各个字符的值打印为整数,但是,我一直在获得负面价值。我的疯狂猜测是,这些字符以带符号的1字节字符(-128至127)的形式存储在std::string中,因此,为什么我得到负值输出。负值是我要插入的正值的等效负值形式。我做了一些研究,但似乎找不到找到我想要的答案的方式来表达我的问题。

2 个答案:

答案 0 :(得分:5)

不,这取决于实现。

std::stringstd::basic_string<char>的别名,因此问题归结为您平台/实现上char的签名。

如果您希望它未签名,请明确将其转换:

std::cout << static_cast<int>(static_cast<unsigned char>(ch));

或者,按照注释中的建议,使用vector<uint8_t>代替string

答案 1 :(得分:3)

这与string并没有任何关系,只是char可能是带符号的类型。您需要做的就是将char转换为unsigned char。例如

char some_char = ...;
cout << (int)(unsigned char)some_char;

string some_string = ...;
cout << (int)(unsigned char)some_string[0];