希望std :: string :: operator []可以返回unsigned char

时间:2015-07-29 16:42:20

标签: c++ string

如果s在C ++中的类型为strings[n]将返回char,而不是unsigned char。这给我带来了很多问题,因为我必须在任何地方进行类型转换。

以下代码不会打印“是”。

#include <string>
#include <iostream>
using namespace std;

typedef unsigned long ulong;
typedef unsigned int uint;
typedef unsigned short uint16;
typedef unsigned char uchar;

int main(int argc, char *argv[]) {
    string s = "h\x8fllo world";
    printf("%d\n", s[1]);
    if (s[1] == 0x8f) {
        printf("yes\n");
    }
    return 0;
}

我可以通过将上面的内容更改为if ((uchar*)(s[1] == 0x8f) {来使其工作,但有太多事件发生。我真的希望[]班上的string运算符可以返回unsigned char !!有没有办法做到这一点?

2 个答案:

答案 0 :(得分:4)

不,std::stringstd::basic_string<char, ...>,而且您无法或应该做些什么来改变它。

您可以强制执行char无签名(some compilers allow this)并在任何地方粘贴断言,以防止您的代码使用签名的char类型进行编译。

您可以切换为std::basic_string<unsigned char, ...>甚至std::vector<unsigned char>

但是,就个人而言,我只是将角色与另一个角色(而不是整数)进行比较:

if (s[1] == '\x8f')

live demo

我认为无论如何这都是更好的代码。

答案 1 :(得分:4)

您应该可以使用std::basic_string<unsigned char>std::string实际上只是typedefstd::basic_string<char>)。这意味着修改代码以使用新的typedef代替std::string,但这应该是一个相当简单的搜索和替换重构。

有关详细信息,请参阅Strings of unsigned chars

相关问题