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'
awchar\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';
Awchar\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'
之前漏掉了\
,这是两个完全不同的东西。