C++ 无符号字符值类型的基本\u字符串
因此,字符串的值类型为C++ 无符号字符值类型的基本\u字符串,c++,string,char,unsigned,C++,String,Char,Unsigned,因此,字符串的值类型为char。我想要一个值类型为无符号字符的字符串。我之所以想要这样的东西,是因为我目前正在编写一个程序,将十六进制的大量输入转换为十进制,并使用字符串计算结果。但是char的范围(从-128到127)太小了,范围为0到255的无符号char可以很好地工作。考虑这个代码: #include<iostream> using namespace std; int main() { typedef basic_string<unsigned char>
char
。我想要一个值类型为无符号字符
的字符串。我之所以想要这样的东西,是因为我目前正在编写一个程序,将十六进制的大量输入转换为十进制,并使用字符串计算结果。但是char的范围(从-128到127)太小了,范围为0到255的无符号char可以很好地工作。考虑这个代码:
#include<iostream>
using namespace std;
int main()
{
typedef basic_string<unsigned char> u_string;
u_string x= "Hello!";
return 0;
}
#包括
使用名称空间std;
int main()
{
typedef basic_字符串u_字符串;
u_string x=“你好!”;
返回0;
}
但是当我尝试编译时,它显示了两个错误,一个是从常量字符*到无符号常量字符*的无效转换,另一个是初始化std::basic\u string::basic\u string的参数1…(继续)
编辑:
为什么“将大量十六进制输入转换为十进制”问题需要使用字符串文字初始化u_字符串
在计算时,每次我移到十六进制数的左边,我就乘以16。最多结果是16x9=144,这超过了127的限制,这使其成为负值。
另外,我必须像这样初始化它:
x=“0”;x[0]-='0'
因为我希望它的值为0。如果变量为null,则无法对其执行操作;如果变量为0,则可以
那么,我该怎么办呢?字符串文字是
常量字符
,您正在将它们分配给常量无符号字符
您有两种解决方案:
首先,将字符串从标准字符串逐元素复制到元素
其次,为string类编写自己的:
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;
字符串文字是
const char
,您将它们分配给const unsigned char
您有两种解决方案:
首先,将字符串从标准字符串逐元素复制到元素
其次,为string类编写自己的:
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;
另一种解决方案是让编译器将
char
视为无符号。有以下编译器标志:
- MSVC:
/J
- GCC、Clang、ICC:
-funsigned char
- 另一种解决方案是让编译器将
char
视为未签名。有以下编译器标志:
- MSVC:
/J
- GCC、Clang、ICC:
-funsigned char
u_字符串
?@Robᵩ 请看我的编辑。@user2653125您的编辑仍然不能解释为什么需要字符串文字进行初始化。这并不能回答我的问题。我的意思是,你为什么关心初始化?为什么要使用字符串呢?std::vector
有什么问题?为什么“将大量十六进制输入转换为十进制”问题需要使用字符串文本初始化u_字符串
ᵩ 请看我的编辑。@user2653125您的编辑仍然不能解释为什么需要字符串文字进行初始化。这并不能回答我的问题。我的意思是,你为什么关心初始化?为什么要使用字符串呢?std::vector
有什么问题?我想在代码中这样做,因为我必须将代码作为解决方案上传到在线站点。我想在代码中这样做,因为我必须将代码作为解决方案上传到在线站点。