相关疑难解决方法(0)

C/C++为什么要对二进制数据使用unsigned char?

是否真的有必要unsigned char像在一些处理字符编码或二进制缓冲区的库中一样使用二进制数据?要理解我的问题,请看下面的代码 -

char c[5], d[5];
c[0] = 0xF0;
c[1] = 0xA4;
c[2] = 0xAD;
c[3] = 0xA2;
c[4] = '\0';

printf("%s\n", c);
memcpy(d, c, 5);
printf("%s\n", d);
Run Code Online (Sandbox Code Playgroud)

两者printf's输出 correctly, where f0 a4 ad a2Unicode代码点的编码U+24B62 ()在十六进制中.

甚至memcpy还正确地复制了char所持有的位.

什么推理可能主张使用unsigned char而不是plain char

在其他相关问题unsigned char中突出显示,因为它是唯一的(字节/最小)数据类型,保证C规范没有填充.但正如上面的例子所示,输出似乎不受任何填充的影响.

我使用VC++ Express 2010和MinGW来编译上面的内容.虽然VC给出了警告

warning C4309: '=' : truncation of constant value

输出似乎没有反映出来.

PS这可以标记为可能重复的字节缓冲区应该是有符号的还是无符号的char缓冲区?但我的意图是不同的.我在问为什么一些似乎工作正常的东西char应该输入unsigned char

更新:引用N3337,

Section …

c c++ bytebuffer character-encoding rawbytestring

51
推荐指数
4
解决办法
2万
查看次数

3
推荐指数
3
解决办法
852
查看次数