【问题标题】:Convert character to integer, and integer back to same character [closed]将字符转换为整数,并将整数转换回相同的字符[关闭]
【发布时间】:2016-03-18 15:49:54
【问题描述】:

我想要两个创建两个可以做到这一点的函数。所以一个函数接受一个字符,例如字符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 个chars 的字符也可以工作?

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

【问题讨论】:

  • 也许你可以看看this link
  • 另外,既然你说 ascii 字符就可以,为什么要使用多个字符来表示?
  • C 没有字符类型。 char 和整数类型。寻找问题的解决方案?
  • @CarefulNow ASCII 码适用于a 等字符,但不适用于á 等字符。
  • 您需要知道使用什么encoding 来表示重音字符。可能是 UTF-8,因为它们是多字节的,但是 C 并没有尝试解释这些字节,所以它不在乎。如果是 UTF-8,那么您可以使用类似于 this 的代码转换为 Unicode 代码点。

标签: c unicode


【解决方案1】:

对于单字节字符,这没有问题,因为 char 是一个整数:

int i = 'B';

char c = 0x33;

会正常工作。

但是,如果将 UTF8 与超过一个字节的字符一起使用,则必须将 UTF8 字符串转换为 UCS4 字符串。遗憾的是没有标准的 API。

另请参阅此帖子:Converting a UTF-8 text to wchar_t

另一种方法是在任何地方使用 wchar_t。这在具有 BMP 之外的字符的 Windows 上无法正常工作,因为 Windows 中的 wchar_t 实现已被破坏(wchar_t 在 Windows 上仍然是多字节字符集)。如果你不使用复合字符,它会在 Linux 上工作。

【讨论】:

    猜你喜欢
    • 2012-09-16
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多