2014-12-01 7 views
0

Мне сложно преобразовать значение, которое я прочитал из сокетного соединения в целое. Это значение говорит мне, сколько байтов будет получено дальше.Невозможно преобразовать строку в int в PHP

$ar = fread($client, 4); 
$binaryInt = unpack('N', $ar); 
debug_to_console($binaryInt); //displays 16 (as expected) 
$bred = fread($client, intval($binaryInt)); //intval returns 1 

По какой-то причине intval всегда оценивает 1, и я не могу понять, почему. Btw переменная $ ар передается целое число от сервера Java Я работает через этот образец кода

dOut.writeInt(data.length); 

Благодарности

редактировать

я, наконец, получил его. user2587326 ниже помог, но вместо использования intval (binaryInt [1]) это было просто binaryInt [1].

+0

Мы не знаем, на что вы рассчитываете. –

+0

[unpack] (http://php.net/manual/en/function.unpack.php) возвращает массив. Вызов [intval] (http://php.net/manual/en/function.intval.php) в массиве всегда будет возвращать 1 и выдавать уведомление, поэтому то, что вы видите, совершенно нормально. Что вы на самом деле пытаетесь сделать? – Pevara

+0

Это значение сообщает мне, сколько бит я получаю после 4-байтового целочисленного значения, которое я пытаюсь оценить. «$ bred = fread ($ client, ...)» - это то, где он не оценивает то, что я хочу – sc2bigjoe

ответ

1

Я думаю, что вы читаете 4-байтовое целое, отправленное из вашей Java-программы через DataOutputStream в вашу PHP-программу через сокет.

Во-первых, Fread ($ клиент, 4) вызов читает эти 4 байта в виде строки, затем конвертировать их в массив с распаковывать(), с 4 байта за раз (спецификатор формата «N»), таким образом, в результате чего с массивом с одним элементом, так что вы просто использовать:

intval ( $ binaryInt [1] ) вместо intval ($ binaryInt), чтобы получить этот номер.

Редактировать: но он также работает с intval, это не повредит.

+0

, который все еще не работает. :( – sc2bigjoe

+0

Я получил его, вместо того, чтобы использовать intval ($ binaryInt [1]), это просто $ binaryInt [1]. $ BinaryInt [0] - это строковое значение int, если кто-то задавался вопросом. Http: // php. net/manual/en/function.unpack.php в примере # 1 объясняется – sc2bigjoe

+0

Вы верны, intval() там не нужен, но $ binaryInt [0] не будет доступен. Вы были смущены примером, который использует другой спецификатор формата. В этом случае индексы массива представляют собой символы и int, а не 0 и 1. Следующий пример: $ value) print "\ $ b [$ key] = $ value \ n"; print gettype ($ b [1]). "\ n"; print $ b [1]. "\ N"; print $ b [0]; ?> печатает следующий вывод: $ B [1] = 825373492 целое РНР Примечание: Undefined смещение: 0 в a.php по линии 8 – Palo

Смежные вопросы