小编Mah*_*our的帖子

如何使用 fribidi 重新排序双向文本

我有一个组合的 English-ASCII/Arabic-Unicode 字符串,如:

???
abc
??
Run Code Online (Sandbox Code Playgroud)

3 个 Unicode 阿拉伯字符 + 空格 + 3 个 ASCII 英文字符 + 空格 + 2 个 Unicode 阿拉伯字符

UTF8:"\xD9\x85\xD8\xAA\xD9\x86\x20\x31\x32\x33\x20\xD9\x8C\xD8\xA9"

UTF16: "\xFEE3\xFE98\xFEE3\x20\x31\x32\x33\x20\xFBFE\xFB8F"

为了以上述联合形式显示文本,我的嵌入式设备 API 以相反的顺序接受 Unicode 阿拉伯语表示形式 B。因此,我需要将此字符串重新排序为以下表单:

重新排序的 UTF16:“\xFB8F\xFBFE\x20\x31\x32\x33\x20\xFEE3\xFE98\xFEE3”

并将其转换为 UTF8 Presentation Form B:

UTF8_FormB:"\xef\xae\x8f\xef\xaf\xbe\x20\x31\x32\x33\x20\xef\xbb\xa6\xef\xba\x98\xef\xbb\xa3"

我的问题是关于重新排序的重新排序步骤

UTF16: "\xFEE3\xFE98\xFEE3\x20\x31\x32\x33\x20\xFBFE\xFB8F"

重新排序的 UTF16:“\xFB8F\xFBFE\x20\x31\x32\x33\x20\xFEE3\xFE98\xFEE3”

我想我需要使用弗里比迪来做到这一点。这是我如何使用 Fribidi:

uint32_t                utf16Str[256]       = { 0};
uint32_t                reorderedStr[256]   = { 0};
uint16_t                rawLen              = 0;
uint16_t                utf16Len            = 0;
FriBidiCharType         pbase_dir           = FRIBIDI_TYPE_ON;
fribidi_boolean         stat;

    stat =  fribidi_log2vis(
    /* input */
    utf16Str,//UTF16: …
Run Code Online (Sandbox Code Playgroud)

c unicode freetype unicode-string harfbuzz

3
推荐指数
1
解决办法
275
查看次数

gcc生成编译时错误,因为无法识别__TIMESTAMP__和其他一些已定义的构建变量

我正在使用基于eclipse和GCC的IDE的现有示例来编译我的嵌入式EFTPOS设备的应用程序.但在以下几行:

fprintf(stdout, "** Compilation date: %s \n", __TIMESTAMP__);
fprintf(stdout, "**** SDK release: %s \n", __SDK_RELEASE__);
fprintf(stdout, "**** ToolChain release: %s \n", __TOOLCHAIN_RELEASE__);
Run Code Online (Sandbox Code Playgroud)

我收到这些编译时错误,似乎编译器无法识别这些宏.

Symbol '__TIMESTAMP__' could not be resolved    main.c
Symbol '__SDK_RELEASE__' could not be resolved  main.c
Symbol '__TOOLCHAIN_RELEASE__' could not be resolved    main.c
Run Code Online (Sandbox Code Playgroud)

如果我尝试fprintf(stdout, "** Compilation date: %s \n", __TIME__);它编译成功.为什么编译器识别__TIME__ 宏但返回错误__TIMESTAMP__?您也可以在构建变量中看到__SDK_RELEASE____TOOLCHAIN_RELEASE__定义它们.

图片链接

编辑: 感谢您的回复,请原谅我缺乏提供的信息.在C/C++ build - > setting-> symbols中:

'__SDK_RELEASE__="${SDK_RELEASE}"'
'__TOOLCHAIN_RELEASE__="${TOOLCHAIN_RELEASE}"'
Run Code Online (Sandbox Code Playgroud)

定义,然后__SDK_RELEASE__,__TOOLCHAIN_RELEASE__必须__TIME__是有效的.我的意思是,如果宏有效__TIMESTAMP__ …

c eclipse embedded gcc gnu

0
推荐指数
1
解决办法
323
查看次数

标签 统计

c ×2

eclipse ×1

embedded ×1

freetype ×1

gcc ×1

gnu ×1

harfbuzz ×1

unicode ×1

unicode-string ×1