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

标签 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 以外的值。然后我想循环它并根据哪些索引不是 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/

相关文章:

ios - 如何将 Obj-C block 保存在 C 结构中?

c++ - C中实现的平均直流估计器的解释

c - 如何从 PCM 获取缓冲区?

c++ - 通过 C++ 在控制台中使用 Unicode 字符

python - 如何在正则表达式的异常中允许字符和空格?

perl - Unicode block 的命令行过滤

c++ - gsl 中的 matlab mvnrnd

c - 字符数组是在 C 中表示字符串常量的另一种方式吗?

c++ - IME - 如何处理按键

python - Unicode解码错误: 'utf8' codec can't decode byte 0xc3 in position 0: unexpected end of data