是否真的有必要使用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); 两个printf's输出𤭢正确,其中f0 a4 ad a2是Unicode代码点U+24B62 (𤭢)的hex编码。 即使是memcpy也正确地复制了char所保存的位。 什么推理可能主张使用unsigned char而不是plain char ? 在其他相关问题中, unsigned char被突出显示,因为它是唯一的(字节/最小)数据types,保证C规范没有填充。 但是,正如上面的例子所显示的,输出似乎不受任何填充的影响。 我用VC ++ Express 2010和MinGW来编译上面的代码。 尽pipeVC发出警告 warning C4309: '=' : truncation of constant […]