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