如何使用十六进制数初始化char数组?

tex*_*uce 11 c++ unicode

我使用utf8并且必须在char数组中保存一个常量:

const char s[] = {0xE2,0x82,0xAC, 0}; //the euro sign
Run Code Online (Sandbox Code Playgroud)

但是它给了我错误:

test.cpp:15:40: error: narrowing conversion of ‘226’ from ‘int’ to ‘const char’ inside { } [-fpermissive]
Run Code Online (Sandbox Code Playgroud)

我必须将所有十六进制数字转换为char,我觉得这很乏味,并且闻起来不太好.有没有其他正确的方法这样做?

Bas*_*tch 22

char可能是signedunsigned(默认是特定于实现).你可能想要

  const unsigned char s[] = {0xE2,0x82,0xAC, 0}; 
Run Code Online (Sandbox Code Playgroud)

要么

  const char s[] = "\xe2\x82\xac";
Run Code Online (Sandbox Code Playgroud)

(字符串文字是一个数组,char除非你给它一些前缀)

请参阅GCC的-funsigned-char (或-fsigned-char)选项.

上一些实施方式中charunsignedCHAR_MAX是255(和CHAR_MIN为0).别人char-s是signed如此CHAR_MIN是-128和CHAR_MAX127(和如东西都是在Linux/PowerPC的/ 32位和Linux/x86平台/ 32位不同).AFAIK标准中没有任何内容禁止19位签名字符.

  • @BasileStarynkevitch:是的,就在几天前,我在Standard的深处度过了一段时间,弄清楚为什么我的代码不能工作,我遇到了这个宝石,我意识到我需要三个重载,而不是两个.C++ 03参考:3.9.1基本类型"1/[...] Plain char,signed char和unsigned char是三种不同的类型.[...]" (2认同)