我想要两个创建两个可以执行此操作的函数。因此,一个函数接受一个字符,例如字符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
之外的其他东西然后我想循环它并根据哪些索引构建一个字符串't 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也会有效吗?
如果不清楚我的意思只是问我,我会详细说明。
答案 0 :(得分:1)
对于单字节字符,这不是问题,因为char是一个整数:
int i = 'B';
和
char c = 0x33;
会正常工作。
但是,如果将UTF8与具有多个字节的字符一起使用,则必须将UTF8-String转换为UCS4字符串。遗憾的是,没有标准API。
另请参阅此帖子:Converting a UTF-8 text to wchar_t
另一种方法是在任何地方使用wchar_t。这在使用BMP之外的字符的Windows上不能很好地工作,因为Windows中的wchar_t实现是brocken(wchar_t仍然是Windows上的多字节字符集)。如果不使用复合字符,在Linux上它将起作用。