unsigned char的basic_string值Type

时间:2013-09-15 10:06:29

标签: c++ string char unsigned

因此,字符串带有char的值类型。我想要一个值类型为unsigned char的字符串。为什么我想要这样的事情是因为我正在编写一个程序,它将十六进制的大输入转换为十进制,我使用字符串来计算结果。但是-128到127的char范围太小,范围为0到255的unsigned char可以完美地工作。请考虑以下代码:

#include<iostream>
using namespace std;

int main()
{
    typedef basic_string<unsigned char> u_string;
    u_string x= "Hello!";

    return 0;
}

但是当我尝试编译时,它显示2个错误,一个是 _无效转换从const char *到无符号const char * _ ,另一个是初始化std ::的参数1 basic_string&lt; _CharT,_Traits,_Alloc&gt; :: basic_string ...... (继续)

编辑: &#34;为什么问题&#34;将十六进制的大输入转换为十进制&#34;要求用字符串文字初始化一个u_string?&#34; 在计算时,每次我移动到十六进制数的左边,我乘以16.最多结果将是16x9 = 144,超过127的限制,并使其为负值。 另外,我必须像这样初始化它:

  

X =&#34; 0&#34 ;; x [0] - =&#39; 0&#39 ;;

因为我希望它的值为0。如果变量为null,那么我就不能对它执行操作,如果它是0,那么我可以。

那么,我该怎么办?

2 个答案:

答案 0 :(得分:3)

字符串文字为const char,您将它们分配给const unsigned char

你有两个解决方案:

首先,按标准字符串将字符串复制到元素中。

其次,为您的字符串类编写自己的user-literal

inline constexpr const unsigned char * operator"" _us(const char *s,unsigned int)
{
    return (const unsigned char *) s;
}

// OR 

u_string operator"" _us(const char *s, unsigned int len)
{
    return u_string(s, s+len);
}

u_string x = "Hello!"_us;

答案 1 :(得分:1)

另一种解决方案是让您的编译器将char视为无符号。这有编译器标志:

  • MSVC:/J
  • GCC,Clang,ICC:-funsigned-char