【发布时间】:2019-08-14 19:10:06
【问题描述】:
我有类似的东西
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 代码数组
【问题讨论】:
-
char只有 8 位,因此不足以存储那些大的 Unicode 代码点。你在哪里使用这些字符串?接收函数是否支持 Unicode?span> -
我可以使用什么类型的数组来代替 char?我正在尝试使用 long int str[] = { 'А' , 'Б', 'В'}; printf("char_offset:%d\n", str[1]);及其工作,
-
它不起作用。编译器已经给了你很多有用的警告,比如“多字符字符常量 [-Wmultichar]”。它可能看起来 像它正在工作,因为在 C 中有 multi-character literals 和
'ABCD'一样,但它不是人们期望在字符串中的字符。完全不清楚你想对这些字符做什么,但你必须将它们存储为字符串,或者使用wchar_t(这不是一个好主意) -
从您的问题中不清楚(对我来说)您要做什么,也不清楚您使用什么作为输入或输出字符集编码。您可以考虑使用带有
L前缀的 C90 宽字符编码:L'Б'或L"Б"。或者您可以考虑使用 C11 Unicode 编码:u、u8和U作为前缀代替L。 (有关详细信息,请参阅 C11 §6.4.4.4 Character constants 和 §6.4.5 String literals。)您想要 UTF-32、UTF-16 还是 UTF-8 作为输出?输入代码集是什么?
标签: c unicode char symbols cyrillic