Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将字符西里尔字母数组转换为每个字符符号的unicode代码数组?_C_Unicode_Char_Symbols_Cyrillic - Fatal编程技术网

如何将字符西里尔字母数组转换为每个字符符号的unicode代码数组?

如何将字符西里尔字母数组转换为每个字符符号的unicode代码数组?,c,unicode,char,symbols,cyrillic,C,Unicode,Char,Symbols,Cyrillic,我有点像 char[] = "тест"; 我需要把每个符号转换成这个符号的代码。(А-53392 Б-53393Б-53394等) 现在我用 char symb = 'у'; int number = symb - ' '; 或 但它只适用于一个符号,我有错误 warning: multi-character character constant [-Wmultichar] 我正在尝试使用 long int str[] = { 'А' , 'Б', 'В'}; printf("char_

我有点像

char[] = "тест";
我需要把每个符号转换成这个符号的代码。(А-53392
Б-53393Б-53394等) 现在我用

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

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

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上使用此代码。帮助我将带有西里尔字符的字符串转换为字符串中字符的整数码数组

这里是我转换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; }

if((final>=1040)和&(final
char
只有8位,因此不足以存储那些大的Unicode码点。您在哪里使用这些字符串?接收函数支持Unicode吗?我可以使用什么类型的数组来代替char?我正在尝试使用long int str[]={'А',Б',Б'};printf(“字符偏移量:%d\n”,str[1]),并且它正在工作,但不工作。编译器已经给了您很多有用的警告,如“多字符字符常量[-Wmultichar]“。它可能看起来很有效,因为在C中有类似于
'ABCD'
,但这不是字符串中所需的字符。完全不清楚如何处理字符,但必须将它们存储为字符串,或者使用
wchar\u t
(这不是一个好主意)例如,
А
Б
是Unicode,它们是1040和1041的十进制,而不是像您在输入中看到的53392,因为多字符文字通常不清楚(对我来说)从您的问题中可以看出,您正在尝试做什么,以及您正在使用什么作为输入或输出字符集编码。您可以看看使用带有
L
前缀的C90宽字符编码:
L'Б'
L“Б”
。或者您可以考虑使用C11 Unicode编码:
u
u8
u
作为前缀来代替
L
(有关更多信息,请参阅C11和。)您想要UTF-32、UTF-16或UTF-8作为输出吗?输入代码集是什么?如果这不是答案,请编辑您的问题并在那里添加此信息。这是答案。谢谢。
        if ( (final  >= 1040) && (final <= 1103) ){
        DecToHex(final, unicode_code); /// to hex      
        return final;
        }
        else { return -1; }