我有类似
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代码数组
答案 0 :(得分:1)
这是我转换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; }