2016-12-14 35 views
0

在MFC文本说我想的TextOut线,在格式化文本是右对齐,如:从字符转换空白处wchar_t的

1234 

225 

    64 

但是,下面的代码无法正常工作:

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

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

+0

'i'未初始化......这个例子应该打印什么? – StoryTeller

+2

有什么'mfc'这样做?如果您尝试在文本框或其他窗口小部件上显示,那么该窗口小部件将具有文本否的右对齐属性? – EdChum

+0

阅读有关价值理由的内容。 –

回答

0

与所有其他UTF-16编码字符一样,空格字符也由两字节代码单元组成。致电swprintf按照广告作品1)2)。错误是在代码或逻辑验证你的假设,我们看不到的代码。验证使用

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


1):

作为参考,下面的代码

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

填充用的字节以下序列(仅供参考字符表示)的缓冲器Visual Studio 2015更新3.
2)虽然您确实应该使用符合ISO的std::swprintf,并采用显式的目标缓冲区大小参数。