将空格从char转换为wchar_t

时间:2016-12-14 11:29:15

标签: c++ mfc

假设我想在MFC中输出文本行,将文本格式化为右对齐,如:

1234

 225

  64

但以下代码效果不佳:

 wchar_t test[20];
 int i;
 swprintf(test, L"%4d",i);

似乎在wchar_t中转换的空格仍然只占用一个字节的空间而不是两个,因此文本不对齐。有没有一种简单的方法来解决它?感谢。

1 个答案:

答案 0 :(得分:0)

与所有其他UTF-16编码字符一样,空格字符也包含两个字节的代码单元。 swprintf调用的作用与广告 1) 2)相同。错误在代码或逻辑中验证您的假设,我们无法看到的代码。

供参考,以下代码

wchar_t test[20];
swprintf( test, L"%4d", 64 );

使用以下字节序列填充缓冲区(提供的字符表示形式):

0x20 0x00 0x20 0x00 0x36 0x00 0x34 0x00 0x00 0x00
+-------+ +-------+ +-------+ +-------+ +-------+
  L' '      L' '      L'6'      L'4'      L'\0'

<小时/> 1) 使用Visual Studio 2015 Update 3验证。
2) 虽然您确实应该使用符合ISO的std::swprintf,但要采用显式的目标缓冲区大小参数。