c - 如何将 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 代码数组
解决方案
这是我转换 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; }
推荐阅读
- python - 我应该如何在底图上正确显示我的图?
- python - 异步PG。将记录转换为 JSON 的正确方法是什么
- ios - 在 iOS 上手动配置和启动 Crashlytics
- c# - 尝试通过 Angular 8 访问时出现 Identity Server 4 CORS 错误
- excel - 如何找到非活动工作簿的最后一行并复制/粘贴
- python - 在同一个excel文件中写入多个工作表
- excel - Vba Excel 信任访问 VBA 项目模型
- c# - 我可以在 C# 中将泛型类型转换为 Dictionary<,> 吗?
- cube - 索引犰狳 cx_cube 非连续行
- javascript - 如何从 MongoDB 返回一个对象,该对象包含一个带有其他集合 id 的数组?