Php bayt dizisi String

6 Cevap php

How can I get the byte array from some string which can contain numbers, letters and so on? If you are familiar with Java, I am looking for the same functionality of the getBytes() method.

Ben böyle bir pasajı çalıştı:

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

ama başarılı olamadı, bu yüzden her türlü yardım takdir edilecektir.

PS: Neden tüm bu ihtiyacım yok!? Eh, ben Java ile yazılmış bir sunucuya fputs üzerinden bir bayt dizisi () göndermek gerekiyor ...

6 Cevap

@ Sparr doğru, ama C # byte[] gibi bayt dizisi bekleniyor sanırım. Sparr yaptığı gibi aynı çözüm yerine HEX size int sunu (range from 0 to 255) her char bekleniyor. Aşağıdaki gibi yapabilirsiniz:

$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

Ile var_dump Sen unsurları olduğunu görmek int (not string ) olabilir.

   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 ...

Gerekirse iki onaltılık karakter parçalar halinde sonucu ayırabilirsiniz.

Bu deneyebilirsiniz:

$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, dizeleri bytestreams vardır. Tam olarak ne yapmaya çalışıyorsun?

Re: düzenlemek

Ps. Neden tüm bu ihtiyacım yok!? Peki ben java ile yazılmış sunucu) (fputs yoluyla ByteArray göndermek gerekir ...

fputs argüman olarak bir dize alır. Büyük olasılıkla, sadece bunun için dize geçmek gerekir. Şeylerin Java tarafında, ne olursa olsun kodlamada verilerin kodunu gerektiğini, bu (varsayılan iso-8859-1) php kullanıyorsunuz.

PHP açık bir byte türü vardır, ancak string zaten Java bayt dizisi eşdeğerdir. Sen güvenle yazabilirsiniz fputs($connection, "The quick brown fox …"). Eğer farkında olmalıdır tek şey karakter kodlama, her iki tarafta aynı olmalıdır. mb_convert_encoding() zaman şüphe kullanın.

I found several functions defined in http://tw1.php.net/unpack are very useful.
They can covert string to byte array and vice versa.

Bir örnek olarak byteStr2byteArray () atın:

<?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]);
}
?>