Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在char或wchar\u t中分配一个数字与广义转义序列以获得符号(对于char来说太大)_C++ - Fatal编程技术网

C++ 在char或wchar\u t中分配一个数字与广义转义序列以获得符号(对于char来说太大)

C++ 在char或wchar\u t中分配一个数字与广义转义序列以获得符号(对于char来说太大),c++,C++,为什么我可以在char或wchar\u t中分配一个大的十进制数并生成一个符号,但尝试将其以广义转义序列的格式放置会产生编译器错误“1824对于char来说太大”,它们在内部应该表示相同的值/符号否 例如: #include<iostream> int main() { wchar_t c = '\x720'; wchar_t d = 1824; return 0; } #包括 int main() { wchar_t c='\x720'; wchar_

为什么我可以在
char
wchar\u t
中分配一个大的十进制数并生成一个符号,但尝试将其以广义转义序列的格式放置会产生编译器错误
“1824对于char来说太大”
,它们在内部应该表示相同的值/符号否

例如:

#include<iostream>

int main()
{
    wchar_t c = '\x720';
    wchar_t d = 1824;

    return 0;
}
#包括
int main()
{
wchar_t c='\x720';
wchar_t d=1824;
返回0;
}
由于
wchar\u t c='\x720',该代码产生
C022错误
。下面是我用来参考的表格

十六进制转义序列
\x
只能有2个十六进制数字,结果为1个任意字节。您可能希望使用unicode转义序列
\u
\u
,特别是
'\u0720'
。Unicode转义是指特定的Unicode代码点
\u
允许从基本多语言平面选择4个十六进制数字,并且
\u
允许最多8个十六进制数字选择任何unicode字符

另外,如所述,
'
创建一个
字符,该字符只安全地保存值0-127。您需要一个
L
前缀来创建
wchar\u t
L'\u720'

十六进制转义序列
\x
只能有2个十六进制数字,结果是1个任意字节。您可能希望使用unicode转义序列
\u
\u
,特别是
'\u0720'
。Unicode转义是指特定的Unicode代码点
\u
允许从基本多语言平面选择4个十六进制数字,并且
\u
允许最多8个十六进制数字选择任何unicode字符


另外,如所述,
'
创建一个
字符,该字符只安全地保存值0-127。您需要一个
L
前缀来创建
wchar\u t
L'\u720'
a
wchar\u t
在Windows上是2字节,在其他平台上是4字节。无论哪种方式,
1824
对于任何平台上的
wchar\t
来说都不是太大

但是
'\x720'
不是
wchar\u t
文字,它是
char
文字,并且
char
在所有平台上只有1个字节,因此
1824
对于
char
来说确实太大了

'\x720'
前面加上
L
,使其成为
wchar\t
文字,然后它将适合:

wchar\u t c=L'\x720';

A
wchar\u t
在Windows上是2字节,在其他平台上是4字节。无论哪种方式,
1824
对于任何平台上的
wchar\t
来说都不是太大

但是
'\x720'
不是
wchar\u t
文字,它是
char
文字,并且
char
在所有平台上只有1个字节,因此
1824
对于
char
来说确实太大了

'\x720'
前面加上
L
,使其成为
wchar\t
文字,然后它将适合:

wchar\u t c=L'\x720';

c++primer说您的语句使用的是octal,但它产生的结果与x270应该产生的结果相同。现在我更糊涂了S@Spellbinder2050只有以
0
开头的整数文字才被解释为八进制。上面的序列不能解释为整数文本,它是一个字符(以
”开头)并包含一个Unicode转义文本。请参见您的评论中所说的转义序列只能有2个十六进制数字,但随后显示的“\u0720”是十六进制,值为1824。另外,unicode中的十六进制值是否总是以这种格式写入?最后,L'\u0720'是1824,但是'\u0720'是63,你知道为什么吗?@Spellbinder2050:我已经澄清了我的答案,但是
\x
表示十六进制转义(2个十六进制数字),
\u
表示基本多语言平面的Unicode转义(4个十六进制数字),以及
\u
表示任何Unicode字符(8个十六进制数字)C++底漆说你的语句使用八进制,但它和X270应该相同。现在我更糊涂了S@Spellbinder2050只有以
0
开头的整数文字才被解释为八进制。上面的序列不能解释为整数文本,它是一个字符(以
”开头)并包含一个Unicode转义文本。请参见您的评论中所说的转义序列只能有2个十六进制数字,但随后显示的“\u0720”是十六进制,值为1824。另外,unicode中的十六进制值是否总是以这种格式写入?最后,L'\u0720'是1824,但是'\u0720'是63,你知道为什么吗?@Spellbinder2050:我已经澄清了我的答案,但是
\x
表示十六进制转义(2个十六进制数字),
\u
表示基本多语言平面的Unicode转义(4个十六进制数字),以及
\u
表示任何Unicode字符(8个十六进制数字)。wchar\ut d=L'x720;给我一个120的值,也就是'x'@Spellbinder2050你在
x
-
L'x720'
L'\x720'
之前漏掉了
\
是两个完全不同的东西;给我一个120的值,也就是'x'@Spellbinder2050你在
x
-
L'x720'
L'\x720'
之前漏掉了
\
,这是两个完全不同的东西。