【问题标题】:How to Convert int to char*(string) in C++?如何在 C++ 中将 int 转换为 char*(string)?
【发布时间】:2011-03-31 22:35:46
【问题描述】:

SOCKET lhSocket; 诠释 iResult; lhSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); char *sendbuf = "这是一个测试"; iResult = send(lhSocket, sendbuf, (int)strlen(sendbuf), 0);

printf("Bytes Sent: %ld\n", iResult);

我有使用 C++ 中的套接字的客户端和服务器程序现在我发送一个缓冲区,它现在由服务器接收,当服务器回复我说我收到你的数据包时,我应该以字符串格式而不是接收到的字节:某事。如何实现?

我的 iresult 返回一个整数值,我正在通过套接字向服务器发送一条消息,我不想将它打印为发送的字节数:14。 我想打印作为字符串发送到服务器的消息。 我正在处理套接字。 我如何在 C++ 中实现这一点

【问题讨论】:

  • 假设您想将 iResult 转换为字符串,您可以探索 itoa 或其变体。
  • OP:你的问题的标题和你的问题完全矛盾。请澄清...
  • 您也可以为此探索 sprintf

标签: c++ sockets


【解决方案1】:

看看itoa,它将整数转换为字符串。

【讨论】:

    【解决方案2】:

    如果您使用 Visual C++ 2008 或 2010,我认为有一个内置函数可以完成您的工作。

    类似于 itoa(int);将转换给定的 int 并返回一个 char *

    很简单

    它在 stdlib.hlbtw 中

    ** 确保这在所有编译器或分布中都不相同 http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/ 这是一个链接供参考

    【讨论】:

      【解决方案3】:

      另一个机会是 boost::lexical_cast

      const int myIntValue = 12345;
      const std::string myStringValue = boost::lexical_cast(myIntValue);

      【讨论】:

        【解决方案4】:

        您在标题和帖子中提出了不同的问题。

        在 C++ 中将 int 转换为字符串是通过

        #include std::ostringstream oss; oss

        如 Tomasz 所示。

        要从套接字接收数据,您需要进一步调用 recv() 或 read()。您的“发送”呼叫本身并不等待回复。 recv() 或 read() 接受字符数组缓冲区来读取响应,但是您需要循环读取调用返回的内容,直到您有足够的响应来处理,因为 TCP 是所谓的“字节流”协议,这意味着您不能保证每次调用都能获得完整的数据包、线路、消息或除一个字节之外的任何内容。

        鉴于您的问题所暗示的理解程度,我强烈建议您查看套接字编程的 GNU libC 示例 - 有一些服务器和客户端示例 - 通过 Google 很容易找到。

        【讨论】:

          【解决方案5】:
          stringstream buf;
          buf << 12345;
          buf.str(); // string("12345")
          buf.str().c_str(); // char* "12345"
          

          【讨论】:

          • 我有客户端和服务器程序使用 C++ 中的套接字现在我发送一个缓冲区,它现在由服务器接收,当服务器回复我说我收到你的数据包时,我应该以字符串格式而不是接收到的字节获得:某物。如何实现?
          • @Swapnil:这没有任何意义。
          【解决方案6】:

          sendbuf 是您要发送的字符串。改为打印sendbuf

          printf("Bytes Sent: %s\n", sendbuf);
          

          【讨论】:

          • 不,这不是正确答案,这只是C的做事方式。转换东西的标准 C++ 方法在 Tomasz 的回答中。我引用他的话:stringstream buf;缓冲区
          • @Stephane Rolland,“C 做事方式”“不是正确答案”如何???
          • @stranger 因为使用 printf(...) 被认为是危险的,就像使用任何可变参数函数(采用 ... arguments )一样。 C++ 提供了实现这一目标的方法,使用标准 std::stringstreams 因为这个问题被标记为 C++,所以 C++ 答案在 thomasz 的答案中。
          • @Stephane Rolland,谁“认为危险”?我看不出这个答案有什么错误,因为有人可能会犯错误。我确定每个涉及普通指针的答案都是错误的,因为它不使用智能指针,那么呢?
          • @stranger 我找到了这篇文章informit.com/guides/content.aspx?g=cplusplus&seqNum=72,但无论如何我被告知要考虑只使用 std::stringstream 而不是 printf 和 itoa 和 atoi 等......因为它是安全的,并且可能不会崩溃,如果没有给出它正在等待的参数的确切数量,printf 可能会崩溃。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-11-21
          • 2012-06-04
          • 2011-01-26
          • 1970-01-01
          • 2015-07-11
          • 1970-01-01
          • 2017-01-18
          相关资源
          最近更新 更多