【问题标题】:UEFI programming: How to Initialize a CHAR16 Unicode String?UEFI 编程:如何初始化 CHAR16 Unicode 字符串?
【发布时间】:2016-04-29 16:29:42
【问题描述】:

我必须使用一些 char16 宽的字符串来进行 uefi 编程。如何轻松初始化它们? CHAR8 很简单:

CHAR8 *Str = "yehaw\0";

CHAR16 同时也是这样努力的,所以我选择了这个初始化:

CHAR16 *Str;
Str = AllocatePool(6*2); //AllocatePool allocates bytewise
Str = ('y','e','h','a','w','\o');

那么问题是初始化 CHAR16 字符串的正确和最简单的方法是什么?

【问题讨论】:

    标签: c string unicode uefi


    【解决方案1】:

    如果你有 c 标准库并且使用符合标准的 C/C++ 编译器,通常使用 L 作为前缀的字符串适用于声明的字符串。如:

     CHAR16 *Str =  L"yehaw";
    

    有效。但是,为什么不使用普遍接受的类型

     wchar_t
    

    ?

    【讨论】:

    • 注意:wchar_t 不一定是 16 位的。
    • 在 UEFI 编程中,标准库不可用。所以我尝试坚持 UEFI 想要的类型
    【解决方案2】:

    试试这个

    CHAR16 *Str = u"yehaw\0";
    

    【讨论】:

    • 这应该用在L"yehaw"之上,因为CHAR16保证是UINT16,对于UEFI来说是uint16_t
    【解决方案3】:

    “元素类型与 wchar_t、char16_t 或 char32_t 的限定或非限定版本兼容的数组可以由具有相应编码前缀(分别为 L、u 或 U)的宽字符串文字初始化”C11 §6.7 .9 15

    如果CHAR16char16_t 相同,则使用

    Str = u"yehaw";
    

    【讨论】:

      猜你喜欢
      • 2015-06-25
      • 1970-01-01
      • 2016-05-02
      • 2013-08-25
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 2019-09-11
      • 1970-01-01
      相关资源
      最近更新 更多