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

标签 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/

相关文章:

c++ - 在 C++ 中使用 fifo(阻塞读取)

python - 何时在 python 中使用 unicode(string) 和 string.encode ('utf-8' )

.net - 启动 .NET 控制台应用程序时会发生什么?

在 c 中进行转换会导致任何编译错误吗?

c - 为什么这个使用 "crypt"的源代码有这个编译器警告 :

使用二维动态分配字符串创建动态分配结构

c - printf 字段宽度 : bytes or chars?

php - 截断 UTF-8 字符串以适应 PHP 中给定的字节数

c++ - 在 Windows 上,什么时候应该使用 "\\\\?\\"文件名前缀?

c++ - 寻找半 float 或四分之一 float 库