【问题标题】:PHP socket_read to intPHP socket_read 到 int
【发布时间】:2013-06-21 10:54:08
【问题描述】:

如果我使用:

 socket_read($socket, 1024);

我不知道它返回什么类型的变量。我想把它变成一个整数,但我不知道怎么做。
服务器只响应一个数字 (35)。
如果我回显它,我得到 35。如果我将它转换为“(int)”,我得到 0。intval 也返回 0。
我尝试将其转换为字符串,并选择第一个字母 (3),但它返回 0。Substr 也不起作用。
我想要一个 int 值,这样我就可以用这个值计算东西。我需要一个 int 来从另一个值计算这个值的 prozentage。
我能做什么?

编辑:

在 JAVA SERVER SOCKET CODE 中修复了它:

PrintWriter out = new PrintWriter(server.getOutputStream());

而不是使用

DataOutputStream out = new DataOutputStream(server.getOutputStream());

【问题讨论】:

  • 如果它与<p>35</p> 之类的东西相呼应,或者只是一些你看不见的符号怎么办?由 HTML 解析。

标签: php sockets casting int return


【解决方案1】:

似乎字符串包含额外的空格,阻止 PHP 将其转换为数字。

因此,我建议您在将空格转换为数字之前使用trim() 函数删除空格。或者您可以使用正则表达式删除所有非数字字符$out = preg_replace("/[^0-9]/g", "", $in)

如果这仍然不起作用并且var_dump 也没有帮助您,我建议使用 WireShark 嗅探网络流量以检查来自服务器的数据包。如果您可以控制服务器发送的内容,请使用像 XML 或 JSON 这样的体面的序列化方法,而不是自己发明一些协议。

【讨论】:

  • 试过了,但转换不起作用。如果我得到“$variable{0}”,我什么也得不到。如果我使用“$variable{1}”,我会得到“3”
  • 阅读手册进行修剪,它也可以删除其他字符。您必须使用 WireShark 来查看在数字之前发送的字符类型。
  • 添加正则表达式方法来回答,以防修剪让你失望
  • "$out = preg_replace("/[^0-9]/g", "", $in)" and "var_dump($out);"在网站上返回“NULL”
  • 用 java 中的 {PrintWriter pw = new PrintWriter(server.getOutputStream());} 修复它
【解决方案2】:

正如您在manual 中看到的,socket_read 总是返回一个字符串。您应该尝试使用var_dump() 来检查变量的实际值。

您是否尝试将任何数字与该变量相加?在自动投射中它可能会起作用。

【讨论】:

  • 试过了,但是如果我将 1 加到变量中,它只会返回 1 而没有任何总和。 var_dump() 返回:字符串(5)“35”。这是什么意思?
  • 可能字符串以3个空格开头,html不会显示出来。使用trim() 函数删除空格
  • 如果我使用 trim() 和 var_dump() 我得到:string(3) "35"。 $variable{2} 返回“3”
  • 这是我在 PHP 中看到的最奇怪的东西。那里说的是 string(3),但 $var[2] 返回 3!你在 var_dump() 中使用了 trim(),对吧?
  • 我的错,我的意思是 $var[1] 返回 3
【解决方案3】:

为什么不阅读manual page。它返回一个字符串。

尝试print_r 找出该字符串的详细信息。可能是二进制的?!

【讨论】:

  • @WouterHuysentruit - 各有千秋?!
  • 我阅读了手册页,但它不能用作字符串。 print_r 只返回“35”
  • @user2517393 - 为什么不添加 `var_dump/print_r 的输出?
  • @Ed Heal var_dump() 返回:字符串(5)“126”。这是什么意思?
猜你喜欢
  • 2012-02-04
  • 2013-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多