c++ - wchar_t for Linux 和 for Windows 的区别和转换

标签 c++ visual-c++ g++ wchar

我从this了解到和 this thread 在 Windows 中,wchar_t 是 16 位的,对于 Linux,wchar_t 是 32 位的。

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

服务器有一个 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 位)是我唯一的选择吗?

提前致谢!

最佳答案

您必须决定有关如何通过线路传输数据的实际协议(protocol)。这里有几个选项,虽然 UTF-8 通常可能是最明智的 - 这也意味着在 linux 下你基本上可以按原样使用数据(没有理由首先使用 wchar_t,虽然你显然可以将它转换成你想要的任何东西想要)。

在 Windows 下,您必须将 UTF-8 转换为 Windows 需要的 UTF-16(是的,不完全是,但是哦,好吧),如果您想发送数据,则必须将其转换为 UTF-8。还好windows提供了this分别this正是为了这些目的而发挥作用。

显然,您可以决定任何编码,不一定是 UTF-8,过程是相同的:接收数据时将其转换为操作系统的 native 格式,发送时将其转换为在线编码。 iconv如果您不使用 utf-8,则可以在 linux 上工作。

关于c++ - wchar_t for Linux 和 for Windows 的区别和转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13592598/

相关文章:

c++ - 将 C 编译的静态库链接到 C++ 程序

linux - 用于调试应用程序的多个实例的源代码位置

c++ - 以下哪个异常处理代码片段是有效的,为什么

c++ - 确定内存位置是否更改值

c++ - while(true) 可能发生的最坏情况是什么?

c++ - TranslateColors() RGB 和 CMYK 的颜色范围

g++ - UnitTest++ 和 g++ - 库的相对路径

c++ - 使用 lambda 创建的静态变量是线程安全的吗?

c++ - 返回 Vector 的新实例

c++ - 通过套接字发送文件太慢