我应该使用wsprintf()将双精度打印为宽字符串吗

Should I use wsprintf() to print a double as a wide string?

本文关键字:打印 字符串 双精度 wsprintf 我应该      更新时间:2023-10-16

我无法使用wsprintf()打印double值。我试过sprintf(),效果很好。

用于wsprintf()sprintf()的语法如下:

wsprintf(str,TEXT("Square is %lf "),iSquare); // Does not show value
sprintf(str," square is %lf",iSquare);  // works okay

我在使用wsprintf()时是否犯了任何错误?

wsprintf不支持浮点。根本就是用错了。

如果您想要类似sprintf的内容,但对于宽字符/字符串,则需要swprintf

实际上,由于您使用的是TEXT宏,因此可能需要_stprintf:它将从窄实现转换为宽实现,与TEXT用来决定字符串是窄还是宽的预处理器宏同步。然而,整个方法在很大程度上是微软销售和支持基于32位NT内核和16位内核的Windows版本的时代遗留下来的。16位版本只有极少量的宽字符支持,因此微软努力允许编译单个源代码库,以使用窄字符(针对16位内核)或宽字符(针对32位内核)。16位内核已经存在了足够长的时间,几乎没有人真正有理由再支持它们了。

就其价值而言:wsprintf几乎完全是一个历史遗迹。w明显代表Windows。早在(回到16位时代),它就作为Windows的一部分被包括在内。它是在不支持浮点的情况下编写的,因为当时Windows内部不使用任何浮点——这也是为什么它内置了MulDiv这样的例程的部分原因,尽管使用浮点(大致)做同样的事情是非常琐碎的。

函数wsprintf()不支持浮点参数,如果使用浮点值,请尝试使用swprintf()

有关swprint的更多信息可以在此处找到

wsprintf不支持浮点。请参阅其文档-lf未被列为有效的格式代码。

VisualStudio标准库的swprintf函数部分就是您想要的。它支持sprintf所做的所有格式代码。

假设您没有编译到UNICODE,TEXT被#定义为一个常规字符串。