gpt4 book ai didi

c++ - 使用 boost::asio 和 std::wstring 解析网络节点

转载 作者:搜寻专家 更新时间:2023-10-31 02:17:40 25 4
gpt4 key购买 nike

我正在使用 Boost::Asio 进行网络通信。以下代码因以下编译错误而失败。

代码:

std::wstring hostName(L"myserver");
std::wstring portName(L"myport");
auto query = boost::asio::ip::udp::resolver::query(boost::asio::ip::udp::v4(), hostName, portName);

编译错误:

Error   1   error C2665: 'boost::asio::ip::basic_resolver_query<InternetProtocol>::basic_resolver_query' :
none of the 5 overloads could convert all the argument types

我的问题:

  • Boost::Asio 只需要 ANSI 字符串 (std::string) 吗?
  • 这是否意味着不支持具有非 ANSI 字符的主机名?
  • 还是必须先将宽字符串转换为 UTF8?
  • 在后一种情况下,Boost::Asio 是否提供标准方法来执行此操作,或者我可以使用自己的 ANSI/Unicode 转换例程吗?

目前在 Windows 上运行,使用 Visual Studio 2013。

提前致谢。

最佳答案

Boost::Asio 只需要 ANSI 字符串 (std::string) 吗? 它需要 std::string,但不一定是 ANSI,因为 std::string 可以存储 UTF-8。

这是否意味着不支持具有非 ANSI 字符的主机名?我没有亲自尝试过,但由于这本质上是底层操作系统网络代码之上的包装器,我可以找不到它不支持使用 UTF-8 的任何理由。

或者我是否必须先将我的宽字符串转换为 UTF8?很可能,是的,因为宽字符串格式仅由核心 Windows API 使用,而 UTF-8 被其他所有人使用包括提升。

在后一种情况下,Boost::Asio 是否提供标准方法来执行此操作,或者我可以使用自己的 ANSI/Unicode 转换例程吗?Boost 似乎不支持宽字符。只要您使用 Windows 特定的字符编码,就可以使用 Windows 提供的 COM 接口(interface)进行转换(MultiByteToWideChar、WideCharToMultiByte),或者使用您自己的例程。如果已知您自己的例程是可靠/正确的,并且您尚未使用 COM,则您可能希望坚持使用您自己的例程,而不是将对 COM 的依赖项添加到您的项目中。

关于c++ - 使用 boost::asio 和 std::wstring 解析网络节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35559605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com