c++ - 将程序从 Linux 移植到 Windows : Using cstr

标签 c++ linux string windows-10 porting

我正在尝试将一个程序从 Linux 移植到 Windows 10。我有源代码,并且有对“cstr”类型的引用,如下所示:

cstr filename = sourceline->sourcefile;

我不认为 Windows SDK 定义了这种类型(它在代码中被标记为未定义)。我可以将它替换为标准的 C++ 字符串定义,例如:

std::string filename;

或者 cstr 是否有其他我不知道的属性?

最佳答案

我不知道你的 cstr 类型的细节。但是,当您将代码移植到 Windows 时,您应该注意文件名字符串,尤其是它们的编码

在 Linux 上使用 UTF-8 很常见;但在 Windows 上,Win32 API 中使用的 “ native ” Unicode 编码是 UTF-16。所以,如果你使用 std::string 在你的 Linux C++ 代码中存储 UTF-8 编码的字符串,你应该记得在 Windows 上将它们从 UTF-8 转换为 UTF-16,然后再将它们传递给Win32 API。

您可以在特定于 Windows 的 C++ 代码中使用 std::wstring 类(或者甚至是来自 ATL 的 CStringW 类;您已经在编写特定于平台的代码在这里,因此在特定于 Windows 的代码部分使用非标准的不可移植类应该不是问题。

跨平台 C++ 代码在代码的可移植跨平台部分使用 UTF-8,并在 Windows API 边界转换为 UTF-16 是一种常见模式。

此外,您可能会发现 this MSDN Magazine article "Unicode Encoding Conversions with STL Strings and Win32 APIs"感兴趣。

关于c++ - 将程序从 Linux 移植到 Windows : Using cstr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45419266/

相关文章:

c++ - 在 C++ 中,是否可以直接从另一个数组初始化一个数组?

c++ - 将读取的内存过程存储在缓冲区中,然后对其进行搜索

c++ - 将字符串转换为二维数组

python - 索引错误: String Index out of range for recursive function

c++ - 当字符串的最后一个位置是标点符号时程序停止解析

c++ - epoll 和负的 errno 值

linux - 在 Linux 中将数据写入 RTC 备用 ram

linux - 在 tcsh 中隐藏 stderr 和管道 stdout

linux - 运行第一个 shellscript 时出现问题

string - 如何在 Rust 中将字符串拆分为 block 以插入空格