我想要两个创建两个可以执行此操作的函数。因此一个函数需要一个字符,例如字符 a
并返回整数 97
。另一个函数采用这个整数 97
并返回字符a
。我知道这可以通过使用这些字符的 ASCII 代码来完成,但是对于像 é, à, ö
这样的字符就不起作用了。 。这可以使用 unicode 或其他方式来完成吗?
例如:
int character_to_integer(char c) {
convert character to integer and return
}
Input: character_to_index('é');
Output: 102 (for example)
char integer_to_character(int i) {
convert integer to character and return
}
Input: integer_to_character(102);
Output: é
我想用它来做这个:有一个数组,例如 int my_array[5]
所有元素设置为 NULL
在开始时。然后,例如,索引 0、3 和 4(例如对应于 a、d 和 e)被设置为 NULL
以外的值。然后我想循环它并根据哪些索引不是 NULL
构建一个字符串,像这样:
void build_string_from_array(int my_array) {
char buffer[16];
char c;
for (i = 0; i < 5; i++) {
if (my_array[i] != NULL) {
c = integer_to_character(i);
buffer[i] = c;
}
}
buffer[5] = '\0';
printf("%s\n", buffer);
}
Output: ade
注意,这只是一个例子,我知道它可能有问题,但这只是为了表达我的观点。我知道这可以用 ASCII 代码来完成,其中所有字符都只有 1 char
,但是如何才能做到像 é
这样的字符,被视为 2 char
s 也可以工作吗?
如果不清楚我的意思,请询问我,我会详细说明。
最佳答案
对于单字节字符,这没有问题,因为 char 是整数:
int i = 'B';
和
char c = 0x33;
可以正常工作。
但是,如果您将 UTF8 与多于 1 个字节的字符一起使用,则必须将 UTF8 字符串转换为 UCS4 字符串。遗憾的是没有标准 API 来实现这一点。
另请参阅此帖子:Converting a UTF-8 text to wchar_t
另一种方法是在任何地方使用 wchar_t。这在 BMP 之外的字符的 Windows 上效果不佳,因为 Windows 中的 wchar_t 实现已损坏(wchar_t 在 Windows 上仍然是多字节字符集)。在 Linux 上,如果您不使用复合字符,它会起作用。
关于将字符转换为整数,然后将整数转换回相同的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36088761/