2

したがって、 string には の値の型が付属していますchar。値 type の文字列が必要ですunsigned char。私がそのようなことを望む理由は、現在、16 進数の大きな入力を 10 進数に変換するプログラムを作成しており、文字列を使用して結果を計算しているためです。しかし、-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 つのエラーが表示さます。 . (続きます)

編集:「「16 進数の大きな入力を 10 進数に変換する」という問題で、u_string を文字列リテラルで初期化する必要があるのはなぜですか?」計算中、16 進数の左にシフトするたびに 16 を掛けます。結果はせいぜい 16x9=144 になり、限界の 127 を超え、負の値になります。また、次のように初期化する必要があります。

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

値を0にしたいからです。変数が null の場合は操作を実行できません。変数が 0 の場合は実行できます。

それで、私は何をすべきですか?

4

2 に答える 2

3

文字列リテラルはconst charあり、それらをに割り当てていますconst unsigned char

あなたが持っている2つのソリューション:

まず、文字列を標準文字列から要素ごとに要素にコピーします。

次に、文字列クラスに独自のユーザー リテラルを記述します。

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;
于 2013-09-15T10:08:28.560 に答える