Как преобразовать массив символов кириллицы в массив кода Юникода каждого символа символа? - PullRequest
1 голос
/ 24 марта 2019

У меня есть что-то вроде

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 кодов символов в строке

1 Ответ

1 голос
/ 25 марта 2019

Вот моя функция для преобразования символов Юникода. Я добавляю проверки в конце функции. Спасибо @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; }
...