Hướng dẫn byte to string php - byte sang chuỗi php

Làm thế nào tôi có thể lấy mảng byte từ một số chuỗi có thể chứa số, chữ cái, v.v. Nếu bạn quen thuộc với Java, tôi đang tìm kiếm cùng một chức năng của phương thức getBytes ().

Tôi đã thử một đoạn trích như thế này:

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

Nhưng không thành công, vì vậy bất kỳ loại trợ giúp sẽ được đánh giá cao.

Tái bút: Tại sao tôi cần điều này ở tất cả !? Chà, tôi cần gửi mảng byte qua fputs () đến một máy chủ được viết bằng java ...

Dokaspar

7.65714 Huy hiệu vàng67 Huy hiệu bạc93 Huy hiệu Đồng14 gold badges67 silver badges93 bronze badges

Đã hỏi ngày 19 tháng 5 năm 2009 lúc 23:49May 19, 2009 at 23:49

@Sparr là đúng, nhưng tôi đoán bạn mong đợi mảng byte như byte[] trong C#. Đó là giải pháp tương tự như Sparr đã làm nhưng thay vì Hex, bạn mong đợi bản trình bày int (dao động từ 0 đến 255) của mỗi char. Bạn có thể làm như sau:

$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

Bằng cách sử dụng var_dump, bạn có thể thấy rằng các yếu tố là int (không phải

$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
1).

   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) }

Hãy cẩn thận: Mảng đầu ra có chỉ số dựa trên 1 (như nó đã được chỉ ra trong bình luận)

Đã trả lời ngày 13 tháng 7 năm 2012 lúc 8:22Jul 13, 2012 at 8:22

BronekbronekBronek

10,4K2 Huy hiệu vàng43 Huy hiệu bạc45 Huy hiệu Đồng2 gold badges43 silver badges45 bronze badges

2

print_r(unpack("H*","The quick fox jumped over the lazy brown dog"))

Array ( [1] => 54686520717569636b20666f78206a756d706564206f76657220746865206c617a792062726f776e20646f67 ) 

T = 0x54, h = 0x68, ...

Bạn có thể phân chia kết quả thành các khối nhân vật hai giờ nếu cần thiết.

Đã trả lời ngày 20 tháng 5 năm 2009 lúc 0:29May 20, 2009 at 0:29

SparrsparrSparr

7.37730 Huy hiệu bạc47 Huy hiệu đồng30 silver badges47 bronze badges

7

PHP không có loại

$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
2 rõ ràng, nhưng
$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
1 của nó đã tương đương với mảng byte của Java. Bạn có thể viết
$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
4 một cách an toàn. Điều duy nhất bạn phải nhận thức được là mã hóa nhân vật, chúng phải giống nhau ở cả hai phía. Sử dụng mb_convert_encoding () khi nghi ngờ.

Đã trả lời ngày 13 tháng 7 năm 2011 lúc 11:48Jul 13, 2011 at 11:48

Soulmergesoulmergesoulmerge

71.9K19 Huy hiệu vàng117 Huy hiệu bạc152 Huy hiệu đồng19 gold badges117 silver badges152 bronze badges

0

Bạn có thể thử điều này:

$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);

Đã trả lời ngày 19 tháng 5 năm 2009 lúc 23:59May 19, 2009 at 23:59

karim79karim79karim79

336K66 Huy hiệu vàng410 Huy hiệu bạc405 Huy hiệu Đồng66 gold badges410 silver badges405 bronze badges

Trong PHP, chuỗi là byteams. Chính xác những gì bạn đang cố gắng để làm?

Re: Chỉnh sửa

PS. Tại sao tôi cần điều này ở tất cả !? Tôi cần gửi qua fputs () bytearray đến máy chủ được viết bằng java ...

$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
5 lấy một chuỗi làm đối số. Nhiều khả năng, bạn chỉ cần chuyển chuỗi của mình cho nó. Về phía Java của mọi thứ, bạn nên giải mã dữ liệu trong bất kỳ mã hóa nào, bạn đang sử dụng trong PHP (mặc định là ISO-8859-1).

Đã trả lời ngày 24 tháng 6 năm 2009 lúc 20:30Jun 24, 2009 at 20:30

Troelskntroelskntroelskn

Huy hiệu vàng 112K2424 gold badges132 silver badges154 bronze badges

0

Tôi tìm thấy một số chức năng được xác định trong http://tw1.php.net/unpack rất hữu ích. Họ có thể che giấu chuỗi vào mảng byte và ngược lại.
They can covert string to byte array and vice versa.

Lấy bytestr2ByteArray () làm ví dụ:


Đã trả lời ngày 13 tháng 2 năm 2014 lúc 5:53Feb 13, 2014 at 5:53

1