wchar_t for Linux和Windows之间的差异和转换

ssk*_*itk 0 c++ g++ wchar visual-c++

我理解这个这个线程在Windows中,wchar_t是16位&对于Linux,wchar_t是32位.

我有一个客户端 - 服务器架构(只使用管道 - 而不是套接字) - 我的服务器是基于Windows的,客户端是Linux.

Server有一个API来从客户端检索主机名.当客户端基于Windows时,它可以只执行GetComputerNameW并返回Wide-String.但是,当客户端基于Linux时,事情会变得混乱.

作为第一个天真的方法,我使用mbstowcs()希望将wchar_t*返回到Windows服务器端.但是,这个LPWSTR(我的linux clinet端有typedef wchar_t*LPWSTR)在Windows上无法识别,因为它希望它的wchar_t是16位.

那么,将linux上的gethostname()输出 - 在char*中转换为unsigned short(16位)是我唯一的选择吗?

提前致谢!

Voo*_*Voo 6

您将不得不决定如何通过线路传输数据的实际协议.这里有几个选项,虽然可能是UTF-8通常是最明智的 - 也就是说,在linux下你基本上只是按原样使用数据(没有理由使用wchar_t开头,虽然你显然可以把它转换成你的任何你想).

在Windows下,您必须将UTF-8转换为UTF-16(是的,但不是完全,但是很好),Windows需要哪些,如果要发送数据,则必须将其转换为UTF-8.幸运的是,Windows 分别为此提供了功能.

显然你可以决定你想要的任何编码不一定是UTF-8,过程是相同的:当接收数据时将其转换为操作系统的本机格式,当发送时将其转换为你的在线编码.如果你不使用utf-8,iconv适用于linux.