【问题标题】:basic_string of unsigned char Value Typeunsigned char 值类型的 basic_string
【发布时间】:2013-09-19 14:31:55
【问题描述】:

因此,字符串带有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 个错误,一个是 _invalid conversion from const char* to unsigned const char*_,另一个是 initializing argument 1 of std:: basic_string<_chart _traits _alloc>::basic_string...(继续)

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

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

因为我希望它的价值为 0。如果变量为null,则不能对其进行操作,如果为0,则可以。

那么,我该怎么办?

【问题讨论】:

  • 为什么问题“将十六进制的大输入转换为十进制”需要用字符串字面量初始化u_string?
  • @Robᵩ 请查看我的编辑。
  • @user2653125 你的编辑仍然没有解释为什么你需要一个 string literal 来进行初始化。
  • 这不能回答我的问题。我的意思是,你为什么关心初始化?
  • 为什么要使用字符串呢? std::vector&lt;unsigned char&gt; 怎么了?

标签: c++ string char unsigned


【解决方案1】:

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

【讨论】:

  • 好的,如何让它们默认为const unsigned char?
  • 你不能,但你可以拥有你的文字。
【解决方案2】:

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

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

【讨论】:

  • 我想在代码中执行此操作,因为我必须将代码作为解决方案上传到在线站点。
猜你喜欢
  • 1970-01-01
  • 2011-04-19
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
  • 2019-04-16
  • 2012-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多