Intereting Posts

Строка в байтовый массив в php

Как я могу получить массив байтов из некоторой строки, которая может содержать числа, буквы и т. Д.? Если вы знакомы с Java, я ищу ту же функциональность метода getBytes ().

Я попробовал такой сниппет:

for($i = 0; $i < strlen($msg); $i++){ $data.=ord($msg[$i]); //or $data[]=ord($msg[$1]); } 

но безуспешно, поэтому любая помощь будет оценена по достоинству.

PS: Зачем мне это вообще ?? Ну, мне нужно отправить массив байтов через fputs () на сервер, написанный на Java …

@Sparr прав, но я предполагаю, что вы ожидали массив byte[] например byte[] в C #. Это то же самое решение, что и Sparr, но вместо HEX вы ожидали int presentation ( диапазон от 0 до 255 ) каждого char . Вы можете сделать следующее:

 $byte_array = unpack('C*', 'The quick fox jumped over the lazy brown dog'); var_dump($byte_array); // $byte_array should be int[] which can be converted // to byte[] in C# since values are range of 0 - 255 

Используя var_dump вы можете видеть, что элементы являются int ( not string ).

  array(44) { [1]=> int(84) [2]=> int(104) [3]=> int(101) [4]=> int(32) [5]=> int(113) [6]=> int(117) [7]=> int(105) [8]=> int(99) [9]=> int(107) [10]=> int(32) [11]=> int(102) [12]=> int(111) [13]=> int(120) [14]=> int(32) [15]=> int(106) [16]=> int(117) [17]=> int(109) [18]=> int(112) [19]=> int(101) [20]=> int(100) [21]=> int(32) [22]=> int(111) [23]=> int(118) [24]=> int(101) [25]=> int(114) [26]=> int(32) [27]=> int(116) [28]=> int(104) [29]=> int(101) [30]=> int(32) [31]=> int(108) [32]=> int(97) [33]=> int(122) [34]=> int(121) [35]=> int(32) [36]=> int(98) [37]=> int(114) [38]=> int(111) [39]=> int(119) [40]=> int(110) [41]=> int(32) [42]=> int(100) [43]=> int(111) [44]=> int(103) } 
 print_r(unpack("H*","The quick fox jumped over the lazy brown dog")) Array ( [1] => 54686520717569636b20666f78206a756d706564206f76657220746865206c617a792062726f776e20646f67 ) 

T = 0x54, h = 0x68, …

При необходимости вы можете разделить результат на два столбца с шестнадцатеричным символом.

Вы можете попробовать следующее:

 $in_str = 'this is a test'; $hex_ary = array(); foreach (str_split($in_str) as $chr) { $hex_ary[] = sprintf("%02X", ord($chr)); } echo implode(' ',$hex_ary); 

В PHP строки – это потоки. Что именно ты пытаешься сделать?

Re: Редактировать

Ps. Зачем мне это вообще ?? Ну, мне нужно отправить через fputs () bytearray на сервер, написанный в java …

fputs принимает строку в качестве аргумента. Скорее всего, вам просто нужно передать свою строку. На стороне Java вещи вы должны декодировать данные в любой кодировке, которую вы используете в php (по умолчанию iso-8859-1).

PHP не имеет явного типа byte , но его string уже является эквивалентом массива байтов Java. Вы можете безопасно писать fputs($connection, "The quick brown fox …") . Единственное, что вы должны знать, это кодирование символов, они должны быть одинаковыми с обеих сторон. Используйте mb_convert_encoding (), когда вы сомневаетесь.

Я нашел несколько функций, определенных в http://tw1.php.net/unpack , очень полезными.
Они могут скрывать строку в байтовый массив и наоборот.

Возьмите byteStr2byteArray () в качестве примера:

 <?php function byteStr2byteArray($s) { return array_slice(unpack("C*", "\0".$s), 1); } $msg = "abcdefghijk"; $byte_array = byteStr2byteArray($msg); for($i=0;$i<count($byte_array);$i++) { printf("0x%02x ", $byte_array[$i]); } ?>