Hướng dẫn get byte string php - lấy chuỗi byte php

Giả sử tôi có một chuỗi trong PHP, in ra một tệp văn bản như sau:

Nö §9Q1Fª £

Làm cách nào để nhận mã byte này vào tệp văn bản của tôi chứ không phải là các ký tự ASCII FUNKY?

hỏi ngày 26 tháng 2 năm 2009 lúc 17:00Feb 26, 2009 at 17:00

Sử dụng chức năng Ord

http://ca.php.net/ord

eg.

";
}
?>

Đã trả lời ngày 26 tháng 2 năm 2009 lúc 17:03Feb 26, 2009 at 17:03

GautamgautamGautam

2.0651 Huy hiệu vàng24 Huy hiệu bạc24 Huy hiệu đồng1 gold badge24 silver badges24 bronze badges

2

Nếu bạn muốn lấy chuỗi dưới dạng một mảng mã số nguyên, thì có một lớp tốt đẹp:

unpack('C*', $string)

Cẩn thận, mảng kết quả được lập chỉ mục từ 1, không phải từ 0!

Đã trả lời ngày 21 tháng 3 năm 2014 lúc 14:28Mar 21, 2014 at 14:28

Hướng dẫn get byte string php - lấy chuỗi byte php

La Mã Hockeroman HockeRoman Hocke

4.0971 Huy hiệu vàng19 Huy hiệu bạc34 Huy hiệu đồng1 gold badge19 silver badges34 bronze badges

0

Nếu bạn đang nói về giá trị hex, điều này sẽ làm cho bạn:

$value = unpack('H*', "Stack");
echo $value[1];

Tài liệu tham khảo

Đã trả lời ngày 18 tháng 4 năm 2013 lúc 10:26Apr 18, 2013 at 10:26

AdeeadeeAdee

4546 Huy hiệu bạc17 Huy hiệu đồng6 silver badges17 bronze badges

1

Ord() thực hiện thủ thuật với ascii-sarset. Tuy nhiên, nếu bạn, can thiệp vào các chuỗi đa năng (như UTF-8), bạn không gặp may và cần phải tự hack nó.

Đã trả lời ngày 26 tháng 2 năm 2009 lúc 17:06Feb 26, 2009 at 17:06

Henrik Paulhenrik PaulHenrik Paul

66K31 Huy hiệu vàng84 Huy hiệu bạc96 Huy hiệu Đồng31 gold badges84 silver badges96 bronze badges

(Php 4> = 4.4.3, Php 5> = 5.1.3, Php 7, Php 8)

MB_CHECK_ENCODING - Kiểm tra xem các chuỗi có hợp lệ cho mã hóa được chỉ định khôngCheck if strings are valid for the specified encoding

Sự mô tả

mb_check_encoding (mảng | chuỗi | null

unpack('C*', $string)
0 =
unpack('C*', $string)
1,? chuỗi
unpack('C*', $string)
2 =
unpack('C*', $string)
1): bool
(array|string|null
unpack('C*', $string)
0 =
unpack('C*', $string)
1
, ?string
unpack('C*', $string)
2 =
unpack('C*', $string)
1
): bool

Thông số

unpack('C*', $string)
4

Luồng byte hoặc mảng để kiểm tra. Nếu nó bị bỏ qua, chức năng này kiểm tra tất cả các đầu vào từ đầu yêu cầu.array to check. If it is omitted, this function checks all the input from the beginning of the request.

Cảnh báo

Kể từ Php 8.1.0, việc bỏ qua tham số này hoặc vượt qua

unpack('C*', $string)
1 bị phản đối.
unpack('C*', $string)
1
is deprecated.

unpack('C*', $string)
6

Mã hóa dự kiến.

Trả về giá trị

Trả về

unpack('C*', $string)
7 khi thành công hoặc
unpack('C*', $string)
8 về thất bại.
unpack('C*', $string)
7
on success or
unpack('C*', $string)
8
on failure.

Thay đổi

Phiên bảnSự mô tả
8.1.0 mb_check_encoding (mảng | chuỗi | null
unpack('C*', $string)
0 =
unpack('C*', $string)
1,? chuỗi
unpack('C*', $string)
2 =
unpack('C*', $string)
1): bool
unpack('C*', $string)
1
as
unpack('C*', $string)
4 or without argument is deprecated.
8.0.0 Thông số
7.2.0
unpack('C*', $string)
4array as
unpack('C*', $string)
4. Formerly, only strings have been supported.

Luồng byte hoặc mảng để kiểm tra. Nếu nó bị bỏ qua, chức năng này kiểm tra tất cả các đầu vào từ đầu yêu cầu.

Cảnh báo

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

Kể từ Php 8.1.0, việc bỏ qua tham số này hoặc vượt qua

unpack('C*', $string)
1 bị phản đối.

unpack('C*', $string)
6

Mã hóa dự kiến.

Trả về giá trị14 gold badges67 silver badges93 bronze badges

Trả về

unpack('C*', $string)
7 khi thành công hoặc
unpack('C*', $string)
8 về thất bại.May 19, 2009 at 23:49

Thay đổ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

Phiên bản

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

Gọi chức năng này với

unpack('C*', $string)
1 là
unpack('C*', $string)
4 hoặc không có đối số bị phản đối.

unpack('C*', $string)
4 và
unpack('C*', $string)
6 bây giờ là không thể.Jul 13, 2012 at 8:22

Hàm này bây giờ cũng chấp nhận một mảng là

unpack('C*', $string)
4. Trước đây, chỉ có chuỗi đã được hỗ trợ.Bronek

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 ().2 gold badges43 silver badges45 bronze badges

2

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

Array ( [1] => 54686520717569636b20666f78206a756d706564206f76657220746865206c617a792062726f776e20646f67 ) 

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

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 ...May 20, 2009 at 0:29

DokasparSparr

7.65714 Huy hiệu vàng67 Huy hiệu bạc93 Huy hiệu Đồng30 silver badges47 bronze badges

7

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

@Sparr là đúng, nhưng tôi đoán bạn mong đợi mảng byte như

$value = unpack('H*', "Stack");
echo $value[1];
4 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
$value = unpack('H*', "Stack");
echo $value[1];
5 (dao động từ 0 đến 255) của mỗi
$value = unpack('H*', "Stack");
echo $value[1];
6. Bạn có thể làm như sau:Jul 13, 2011 at 11:48

Bằng cách sử dụng

$value = unpack('H*', "Stack");
echo $value[1];
7, bạn có thể thấy các yếu tố là
$value = unpack('H*', "Stack");
echo $value[1];
5 (không phải
$value = unpack('H*', "Stack");
echo $value[1];
9).soulmerge

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)19 gold badges117 silver badges152 bronze badges

0

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

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

BronekbronekMay 19, 2009 at 23:59

karim79karim79karim79

10,4K2 Huy hiệu vàng43 Huy hiệu bạc45 Huy hiệu Đồng66 gold badges410 silver badges405 bronze badges

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:29

Sparrsparr

7.37730 Huy hiệu bạc47 Huy hiệu đồngJun 24, 2009 at 20:30

PHP không có loại

for($i = 0; $i < strlen($msg); $i++){
    $data.=ord($msg[$i]);
        //or $data[]=ord($msg[$1]); 
}
0 rõ ràng, nhưng
$value = unpack('H*', "Stack");
echo $value[1];
9 của nó đã tương đương với mảng byte của Java. Bạn có thể viết
for($i = 0; $i < strlen($msg); $i++){
    $data.=ord($msg[$i]);
        //or $data[]=ord($msg[$1]); 
}
2 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ờ.troelskn

Đã trả lời ngày 13 tháng 7 năm 2011 lúc 11:4824 gold badges132 silver badges154 bronze badges

0

Soulmergesoulmerge
They can covert string to byte array and vice versa.

71.9K19 Huy hiệu vàng117 Huy hiệu bạc152 Huy hiệu đồng


Bạn có thể thử điều này:Feb 13, 2014 at 5:53

1