将std :: string作为参数传递给出错误 - htons函数

时间:2015-12-29 18:07:53

标签: c++ c++11 c-strings

我正在使用套接字,但是当我编译程序时,我遇到了一些错误。

这是我的代码:

address.sin_family = AF_INET;
address.sin_port = htons(string); // here I get an error
inet_aton(str.c_str(),&address.sin_addr);

我得到的是:

  

无法转换'__gnu_cxx :: __ alloc_traits>参数'1'到'uint16_t htons(uint16_t)'的> :: value_type {aka std :: __ cxx11 :: basic_string}'到'uint16_t {aka short unsigned int}'

如何解决此错误?

提前致谢。

2 个答案:

答案 0 :(得分:1)

您需要将std::string转换为std::uint16_t。我推荐stringstream

std::istringstream ss(string); // maybe pick a different name
std::uint16_t port{};
ss >> port;
address.sin_port = htons(port);

请务必#include <sstream>

答案 1 :(得分:0)

htons需要一个uint16_t
这意味着您必须将端口作为整数传递,而不是作为字符串

传递