首页 > 解决方案 > 如何将 char cyrillic 数组转换为每个 char 符号的 unicode 代码数组?

问题描述

我有类似的东西

char[] = "тест";

我需要将每个符号转换为该符号的代码。(А - 53392
Б - 53393 В - 53394 等)现在我使用

char symb = 'у';
int number = symb - ' ';

或者

int symbol = 'У'

但它只适用于一个符号,我有错误

warning: multi-character character constant [-Wmultichar]

我正在尝试使用

long int str[] = { 'А' , 'Б', 'В'};
printf("char_offset:%d\n", str[1]);

及其工作,但是用这种方法声明带有许多符号的字符串并不容易。我有这个错误

Xlib1.c:295:17: warning: multi-character character constant [-Wmultichar]
   int str[] = { 'А' , 'Б', 'В'};
                 ^
Xlib1.c:295:24: warning: multi-character character constant [-Wmultichar]
   int str[] = { 'А' , 'Б', 'В'};
                        ^
Xlib1.c:295:30: warning: multi-character character constant [-Wmultichar]
   int str[] = { 'А' , 'Б', 'В'};
                              ^

但它的工作。 我用这个键和 gcc

 -finput-charset=UTF-8 -std=c11 -fextended-identifiers

我需要在 stm32 上使用此代码。帮助我将带有西里尔字符的字符串转换为字符串中字符的 int 代码数组

标签: cunicodecharsymbolscyrillic

解决方案


这是我转换 unicode 符号的函数。我在函数末尾添加检查。感谢@phuclv 的回复。

int UniCyrConv(char *str, char *unicode_code)
{
        int num1=256+(int)str[0];      //first unicod byte
            int num2=256+(int)str[1];      // second
        int conv1 = (num1 & 31)*64;    // remove 3 first bits and adding 6 zero to end
        int conv2 = (num2 & 63);       // remove 2 first bits
        int final = (conv1 | conv2);   // 1 + 2
        DecToHex(final, unicode_code); /// to hex      
        return final;
}

检查符号是否是西里尔字母

        if ( (final  >= 1040) && (final <= 1103) ){
        DecToHex(final, unicode_code); /// to hex      
        return final;
        }
        else { return -1; }

推荐阅读