我有一个关于在C char数组中保存字符的问题。
我必须将文件中的文本读入“char”类型的数组中(我不能使用unsigned char)。当某些字符的值超过127时(例如€,ä,ö,...),它会将它们保存为负值,但它们通常会占用更多空间(例如€取3个负值)。
如何将这些负值计算回无符号字符。有人可以将我链接到有关该问题的教程或指南吗?
答案 0 :(得分:11)
答案 1 :(得分:1)
这取决于您使用的编码。
传统的1字节编码不会造成任何问题。是的,有些字符被视为负值,但它们仍然是阅读时的字符。如果按原样回写它们,它们就会是它们。
由于您确定每个欧元符号有3 char
s,因此您正在处理一些Unicode编码,例如UTF-8。
这意味着,您应该将它们存储在某些多字节类型中,例如wchar_t
。但这与您在char
中存储数据的要求相矛盾。
我建议您先将文件转换为1字节编码,例如转换为Win1252。此编码对于欧元符号有1个字节。
如果您希望使用Unicode,我恐怕很难处理否定char
。传统的方法是用正整数表示Unicode值。
答案 2 :(得分:-1)
char x = 128;
unsigned char y = (unsigned char) x;
printf("%c %u\n", x, y);