将字符转换为整数,将整数转换回相同的字符

时间:2016-03-18 15:49:55

标签: c unicode

我想要两个创建两个可以执行此操作的函数。因此,一个函数接受一个字符,例如字符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也会有效吗?

如果不清楚我的意思只是问我,我会详细说明。

1 个答案:

答案 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上它将起作用。