Pra*_*sad 4 c++ printf localization
我使用两个函数sprintf和snprintf来处理"double"到string的转换.在其中一个案例中,正在运行的应用程序具有与Windows的语言环境不同的语言环境.因此,在这种情况下,sprintf考虑的语言环境始终是应用程序.然而,snprintf有时会开始使用Windows语言环境.因此,两种方法返回的十进制字符都不同,从而导致问题.
为了提供更多细节,我在我的项目中有一个库,它从"double"构建一个字符串,这个库使用snprintf将double转换为字符串.然后我需要将此信息发送到服务器,该服务器将理解"." (点)仅作为小数符号.因此,我需要用"."替换本地十进制字符.(点).要找出本地十进制字符(为了替换它),我使用的是我的项目中提供的一个使用sprintf的库.然后我用一个点替换这个字符以获得最终输出.
另外,请注意,sprintf始终在考虑本机应用程序的区域设置,而snprintf有时会考虑Windows的区域设置.由于问题不一致,抱歉没有提供明确的例子.
那么,snprintf可能在哪些情况下表现不同?为什么我会从这两种方法中获得这种不同的行为?我怎么能避免呢?
PS - 我必须使用这两种方法,所以请建议一个不需要我使用任何不同方法的解决方案.
谢谢.
使用这两种语言环境sprintf和snprintf是不是 Windows区域,但您的应用程序的语言环境.由于此区域设置对您的应用程序是全局的,因此程序中的任何代码行都可以更改它.
在您的情况下,(非线程安全)解决方案可能是临时替换snprintf调用的语言环境:
auto old = std::locale::global(std::locale::classic());
snprintf(...);
std::locale::global(old);
顺便说一下,"Windows语言环境"可以通过它访问std::locale(""),你不需要知道它的确切名称.
| 归档时间: | 
 | 
| 查看次数: | 1850 次 | 
| 最近记录: |