c++ - unsigned char 值类型的 basic_string

标签 c++ string char unsigned

因此,string 带有char 的值类型。我想要一个值类型 unsigned char 的字符串。为什么我想要这样的东西是因为我目前正在编写一个程序,它将十六进制的大输入转换为十进制,并且我正在使用字符串来计算结果。但是 char 的范围(-128 到 127)太小,范围 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* 到 unsigned const char*_ 的无效转换,另一个是 初始化 std::的参数 1 basic_string<_CharT, _Traits, _Alloc>::basic_string...(继续)

编辑: “为什么问题‘将大量的十六进制输入转换为十进制’需要用字符串文字初始化 u_string ?” 计算时,每次向左移动16进制数,我都会乘以16。结果最多是16x9=144,超出了127的限制,使其成为负值。 另外,我必须像这样初始化它:

x="0"; x[0] -='0';

因为我希望它的值为0。如果变量为 null,则无法对其执行操作,如果为 0,则可以。

那么,我该怎么办?

最佳答案

字符串文字是 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;

关于c++ - unsigned char 值类型的 basic_string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18811119/

相关文章:

c++ - 解决到最近元音程序的距离问题

c++ - 生成唯一变量并重用它们

c++ - 'to_string' 未知覆盖说明符

javascript - 替换字符串的每个备用空格

C# - 计算字符串列表中周围字符的总和

C - char* 列表 - 内存分配

c++ - 模板元编程如何专注于集合

c++ - 范恩错误 1 ​​: unable to open file

java - int转char,无限执行

c - 如何在 C 中使用 strstr 循环字符串来查找子字符串