本文介绍如何将各种 Visual C++ 字符串类型转换为其他字符串。
涵盖的字符串类型包括 、、、、、 和 。
在所有情况下,当转换为新类型时,将创建字符串的副本。 对新字符串所做的任何更改都不会影响原始字符串,反之亦然。
有关转换窄字符串和宽字符串的更多背景信息,请参阅窄字符串与宽字符串之间的转换。
要在 Visual Studio 2022 中运行示例,可创建新的 C++ Windows 控制台应用。 如果已安装 C++/CLI 支持,可创建 CLR 控制台应用 (.NET Framework)。
如果创建 CLR 控制台应用,不需要对编译器和调试器设置进行以下更改。 但是,需要将 添加到每个示例的顶部。
无论通过哪种方式,都要将 添加到“项目属性”>“链接器”>“输入”>“其他依赖项”。
如果创建新的 C++ Windows 控制台应用以运行示例,请对项目进行以下更改:
- 将 和 命令行参数添加到“项目属性”>“C++”>“命令行”>“其他选项”。
开关与你创建 C++ Windows 控制台应用项目时设置的一些编译器开关冲突。 以下链接内容说明了可以在 IDE 中的哪些位置关闭存在冲突的开关:
- 关闭 (将基本运行时检查设置为默认):“项目属性”>“C/C++”>“代码生成”>“基本运行时检查”>“默认”
- 关闭 (异常处理模型):“项目属性”>“C/C++”>“代码生成”>“启用 C++ 异常”>“否”
- 将 (调试信息格式)替换为 :“项目属性”>“C/C++”>“常规”>“调试信息格式”>“C7 兼容”
- 关闭 (仅我的代码调试):“项目属性”>“C/C++”>“常规”>“支持仅我的代码调试”>“否”
- 将调试器类型设置为混合:“项目属性”>“调试”>“调试器类型”>“混合(.NET Framework)”
- 打开 “项目属性”>“链接器”>“调试”>“可调试程序集”>“是(ASSEMBLYDEBUG)”
此示例演示了如何从 转换为上面列出的字符串类型。 字符串(也称为 C 样式字符串)使用终止 null 来指示字符串的结尾。 C 样式字符串通常需要每个字符使用 1 个字节,但也可以使用 2 个字节。 在下面的示例中, 字符串有时被称为多字节字符串,因为字符串数据是从宽 Unicode 字符串转换而来的。 单字节和多字节字符 () 函数可以对 字符串进行操作。
有关运行和调试此示例的信息,请参阅运行示例。
此示例演示了如何从 转换为其他字符串类型。 一些字符串类型(包括 )实现了宽字符格式。 若要在多字节和宽字符格式之间转换字符串,可以使用像 这样的单个函数调用或像 这样的类的构造函数调用。
有关运行和调试此示例的信息,请参阅运行示例。
此示例演示了如何从 转换为其他字符串类型。 对象封装宽字符 字符串。 字符串具有长度值,并且不使用 null 字符终止字符串,但要转换为的字符串类型可能需要终止 null 字符。
有关运行和调试此示例的信息,请参阅运行示例。
此示例演示了如何从 转换为其他字符串类型。 与 一样, 对象封装宽字符 字符串。 字符串具有长度值,并且不使用 null 字符终止字符串,但要转换为的字符串类型可能需要终止 null。
有关运行和调试此示例的信息,请参阅运行示例。
此示例演示了如何从 转换为其他字符串类型。 基于 数据类型,而该数据类型又取决于是否定义了符号 。 如果未定义 ,则将 定义为 ,并且 包含一个多字节字符串;如果定义了 ,则将 定义为 ,并且 包含一个宽字符串。
包含 类型并支持单字节或多字节字符串。 是宽字符版本。 和 不使用 来确定它们应该如何编译。 此示例中使用了 和 来阐明缓冲区大小分配和输出处理方面的细微差别。
有关运行和调试此示例的信息,请参阅运行示例。
此示例演示了如何从 转换为其他字符串类型。
有关运行和调试此示例的信息,请参阅运行示例。
此示例演示了如何从宽字符 System::String 转换为其他字符串类型。
有关运行和调试此示例的信息,请参阅运行示例。
传统的 C 和 Windows 应用在处理窄字符串和宽字符串时使用代码页而不是 Unicode 编码。
.NET 字符串是 UTF-16,但 ATL 的 是一个窄字符串,由 Win32 函数执行从宽到窄的转换。 将 C 样式的 (C 样式的 是 .NET )转换为字符串时,会调用相反的 Win32 函数 。
这两个函数都依赖于代码页的 Windows 概念;不是区域性的 .NET 概念。 若要更改系统代码页,请通过以下方式使用区域设置:使用“控制面板”> 在搜索框中输入 >“区域(更改日期、时间或数字格式)”>“管理”>“更改系统区域设置”。
在 语言版本的 Windows 上,代码页默认为 1033。 如果安装其他语言的 Windows,它将具有不同的代码页。 可以使用控制面板来更改它。
执行宽到窄转换的方式与 执行窄到宽转换的方式不一致。 将 (也就是使用当前线程代码页,)传递给收缩转换方法。 但是 将 (也就是使用当前系统代码页)传递给扩大转换方法。 如果系统和线程代码页不匹配,就会导致往返数据损坏。
为了协调这种差异,请使用常量 () 获取转换以使用 (如 .NET)而不是 。 有关详细信息,请参阅 。
另一种方法是使用 调用 。 使用返回的 创建一个 。 然后,使用 获取要在转换中使用的代码页。
ATL 和 MFC 字符串转换宏
与 C 样式字符串相关的 操作
如何:将标准 转换为
如何:将 转换为标准
如何:将 转换为 或
使用 进行编程
、
、
、、
、、
(C++/CLI)
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/haskellbc/73276.html