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