我使用utf8,必须将一个常量保存在char数组中:
const char s[] = {0xE2,0x82,0xAC, 0}; //the euro sign
但是它给我错误:
test.cpp:15:40: error: narrowing conversion of ‘226’ from ‘int’ to ‘const char’ inside { } [-fpermissive]
我必须将所有的十六进制数字都转换为char,这让我感到乏味并且不会闻起来很香。还有其他适当的方法吗?
最佳答案
char
可以是signed
或unsigned
(默认是特定于实现的)。你可能想要
const unsigned char s[] = {0xE2,0x82,0xAC, 0};
要么
const char s[] = "\xe2\x82\xac";
(string literal是
char
的数组,除非您给它加上一些前缀)请参阅GCC的-funsigned-char(或
-fsigned-char
)选项。在某些实现中,
char
是unsigned
,而CHAR_MAX
是255(而CHAR_MIN
是0)。在其他char
-s上是signed
,因此CHAR_MIN
是-128,而CHAR_MAX
是127(例如,Linux / PowerPC / 32位和Linux / x86 / 32位上的内容是不同的)。 AFAIK标准中没有任何内容禁止使用19位带符号的字符。关于c++ - 如何使用十六进制数字初始化char数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53696287/