Làm cách nào để lấy byte từ chuỗi trong PHP?

Bạn muốn phân tích cú pháp một chuỗi chứa các giá trị được mã hóa dưới dạng cấu trúc nhị phân hoặc mã hóa các giá trị thành một chuỗi. Ví dụ: bạn muốn lưu trữ các số ở dạng biểu diễn nhị phân của chúng thay vì dưới dạng các chuỗi ký tự ASCII

Sử dụng

$nums = unpack('S4',$packed);
7 để lưu trữ dữ liệu nhị phân trong một chuỗi

$packed = pack('S4',1974,106,28225,32725);

Sử dụng

$nums = unpack('S4',$packed);
8 để trích xuất dữ liệu nhị phân từ một chuỗi

$nums = unpack('S4',$packed);

Đối số đầu tiên của

$nums = unpack('S4',$packed);
7 là một chuỗi định dạng mô tả cách mã hóa dữ liệu được truyền trong phần còn lại của đối số. Chuỗi định dạng
$nums = unpack('S1a/S1b/S1c/S1d',$packed);
print_r($nums);
Array
               (
                   [a] => 1974
                   [b] => 106
                   [c] => 28225
                   [d] => 32725
               )
0 yêu cầu
$nums = unpack('S4',$packed);
7 tạo bốn số 16 bit ngắn không dấu theo thứ tự byte máy từ dữ liệu đầu vào của nó. Đưa ra 1974, 106, 28225 và 32725 làm đầu vào, điều này trả về tám byte. 182, 7, 106, 0, 65, 110, 213 và 127. Mỗi cặp hai byte tương ứng với một trong các số đầu vào. 7*256+182 là 1974;

Đối số đầu tiên của

$nums = unpack('S4',$packed);
8 cũng là một chuỗi định dạng và đối số thứ hai là dữ liệu cần giải mã. Chuyển một chuỗi định dạng của
$nums = unpack('S1a/S1b/S1c/S1d',$packed);
print_r($nums);
Array
               (
                   [a] => 1974
                   [b] => 106
                   [c] => 28225
                   [d] => 32725
               )
0, chuỗi tám byte mà
$nums = unpack('S4',$packed);
7 tạo ra trả về một mảng bốn phần tử gồm các số ban đầu

print_r($nums);
Array
               (
                   [1] => 1974
                   [2] => 106
                   [3] => 28225
                   [4] => 32725
               )

Trong

$nums = unpack('S4',$packed);
8, các ký tự định dạng và số lượng của chúng có thể được theo sau bởi một chuỗi được sử dụng làm khóa mảng. Ví dụ

$nums = unpack('S4num',$packed);
print_r($nums);
Array
               (
                   [num1] => 1974
                   [num2] => 106
                   [num3] => 28225
                   [num4] => 32725
               )

Nhiều ký tự định dạng phải được phân tách bằng

$nums = unpack('S4',$packed);
5 trong
$nums = unpack('S4',$packed);
8

$nums = unpack('S1a/S1b/S1c/S1d',$packed);
print_r($nums);
Array
               (
                   [a] => 1974
                   [b] => 106
                   [c] => 28225
                   [d] => 32725
               )

Các ký tự định dạng có thể được sử dụng với

$nums = unpack('S4',$packed);
7 và
$nums = unpack('S4',$packed);
8 được liệt kê trong

Bảng 1-2. Định dạng ký tự cho pack() và unpack()

Định dạng ký tự

Loại dữ liệu

$nums = unpack('S4',$packed);
9

Chuỗi đệm NUL

print_r($nums);
Array
               (
                   [1] => 1974
                   [2] => 106
                   [3] => 28225
                   [4] => 32725
               )
0

Chuỗi đệm không gian

print_r($nums);
Array
               (
                   [1] => 1974
                   [2] => 106
                   [3] => 28225
                   [4] => 32725
               )
1

Chuỗi lục giác, nibble thấp trước

print_r($nums);
Array
               (
                   [1] => 1974
                   [2] => 106
                   [3] => 28225
                   [4] => 32725
               )
2

Chuỗi lục giác, nibble cao trước

print_r($nums);
Array
               (
                   [1] => 1974
                   [2] => 106
                   [3] => 28225
                   [4] => 32725
               )
3

print_r($nums);
Array
               (
                   [1] => 1974
                   [2] => 106
                   [3] => 28225
                   [4] => 32725
               )
4

print_r($nums);
Array
               (
                   [1] => 1974
                   [2] => 106
                   [3] => 28225
                   [4] => 32725
               )
5

print_r($nums);
Array
               (
                   [1] => 1974
                   [2] => 106
                   [3] => 28225
                   [4] => 32725
               )
6

print_r($nums);
Array
               (
                   [1] => 1974
                   [2] => 106
                   [3] => 28225
                   [4] => 32725
               )
7

print_r($nums);
Array
               (
                   [1] => 1974
                   [2] => 106
                   [3] => 28225
                   [4] => 32725
               )
8 (16 bit, thứ tự byte máy)

print_r($nums);
Array
               (
                   [1] => 1974
                   [2] => 106
                   [3] => 28225
                   [4] => 32725
               )
9

$nums = unpack('S4num',$packed);
print_r($nums);
Array
               (
                   [num1] => 1974
                   [num2] => 106
                   [num3] => 28225
                   [num4] => 32725
               )
0 (16 bit, thứ tự byte máy)

$nums = unpack('S4num',$packed);
print_r($nums);
Array
               (
                   [num1] => 1974
                   [num2] => 106
                   [num3] => 28225
                   [num4] => 32725
               )
1

$nums = unpack('S4num',$packed);
print_r($nums);
Array
               (
                   [num1] => 1974
                   [num2] => 106
                   [num3] => 28225
                   [num4] => 32725
               )
0 (16 bit, thứ tự byte cuối lớn)

$nums = unpack('S4num',$packed);
print_r($nums);
Array
               (
                   [num1] => 1974
                   [num2] => 106
                   [num3] => 28225
                   [num4] => 32725
               )
3

$nums = unpack('S4num',$packed);
print_r($nums);
Array
               (
                   [num1] => 1974
                   [num2] => 106
                   [num3] => 28225
                   [num4] => 32725
               )
0 (16 bit, thứ tự byte cuối nhỏ)

$nums = unpack('S4num',$packed);
print_r($nums);
Array
               (
                   [num1] => 1974
                   [num2] => 106
                   [num3] => 28225
                   [num4] => 32725
               )
5

$nums = unpack('S4num',$packed);
print_r($nums);
Array
               (
                   [num1] => 1974
                   [num2] => 106
                   [num3] => 28225
                   [num4] => 32725
               )
6 (kích thước phụ thuộc vào máy và thứ tự byte)

$nums = unpack('S4num',$packed);
print_r($nums);
Array
               (
                   [num1] => 1974
                   [num2] => 106
                   [num3] => 28225
                   [num4] => 32725
               )
7

$nums = unpack('S4num',$packed);
print_r($nums);
Array
               (
                   [num1] => 1974
                   [num2] => 106
                   [num3] => 28225
                   [num4] => 32725
               )
8 (kích thước phụ thuộc vào máy và thứ tự byte)

$nums = unpack('S4num',$packed);
print_r($nums);
Array
               (
                   [num1] => 1974
                   [num2] => 106
                   [num3] => 28225
                   [num4] => 32725
               )
9

$nums = unpack('S1a/S1b/S1c/S1d',$packed);
print_r($nums);
Array
               (
                   [a] => 1974
                   [b] => 106
                   [c] => 28225
                   [d] => 32725
               )
0 (32 bit, thứ tự byte máy)

$nums = unpack('S1a/S1b/S1c/S1d',$packed);
print_r($nums);
Array
               (
                   [a] => 1974
                   [b] => 106
                   [c] => 28225
                   [d] => 32725
               )
1

$nums = unpack('S1a/S1b/S1c/S1d',$packed);
print_r($nums);
Array
               (
                   [a] => 1974
                   [b] => 106
                   [c] => 28225
                   [d] => 32725
               )
2 (32 bit, thứ tự byte máy)

$nums = unpack('S1a/S1b/S1c/S1d',$packed);
print_r($nums);
Array
               (
                   [a] => 1974
                   [b] => 106
                   [c] => 28225
                   [d] => 32725
               )
3

$nums = unpack('S1a/S1b/S1c/S1d',$packed);
print_r($nums);
Array
               (
                   [a] => 1974
                   [b] => 106
                   [c] => 28225
                   [d] => 32725
               )
2 (32 bit, thứ tự byte cuối lớn)

$nums = unpack('S1a/S1b/S1c/S1d',$packed);
print_r($nums);
Array
               (
                   [a] => 1974
                   [b] => 106
                   [c] => 28225
                   [d] => 32725
               )
5

$nums = unpack('S1a/S1b/S1c/S1d',$packed);
print_r($nums);
Array
               (
                   [a] => 1974
                   [b] => 106
                   [c] => 28225
                   [d] => 32725
               )
2 (32 bit, thứ tự byte cuối nhỏ)

$nums = unpack('S1a/S1b/S1c/S1d',$packed);
print_r($nums);
Array
               (
                   [a] => 1974
                   [b] => 106
                   [c] => 28225
                   [d] => 32725
               )
7

$nums = unpack('S1a/S1b/S1c/S1d',$packed);
print_r($nums);
Array
               (
                   [a] => 1974
                   [b] => 106
                   [c] => 28225
                   [d] => 32725
               )
8 (kích thước và đại diện phụ thuộc vào máy)

$nums = unpack('S1a/S1b/S1c/S1d',$packed);
print_r($nums);
Array
               (
                   [a] => 1974
                   [b] => 106
                   [c] => 28225
                   [d] => 32725
               )
9

$nums = unpack('S4num',$packed);
print_r($nums);
Array
               (
                   [num1] => 1974
                   [num2] => 106
                   [num3] => 28225
                   [num4] => 32725
               )
70 (kích thước và đại diện phụ thuộc vào máy)

$nums = unpack('S4num',$packed);
print_r($nums);
Array
               (
                   [num1] => 1974
                   [num2] => 106
                   [num3] => 28225
                   [num4] => 32725
               )
71

NULL byte

$nums = unpack('S4num',$packed);
print_r($nums);
Array
               (
                   [num1] => 1974
                   [num2] => 106
                   [num3] => 28225
                   [num4] => 32725
               )
72

Sao lưu một byte

$nums = unpack('S4num',$packed);
print_r($nums);
Array
               (
                   [num1] => 1974
                   [num2] => 106
                   [num3] => 28225
                   [num4] => 32725
               )
73

NUL-điền vào vị trí tuyệt đối

Đối với

$nums = unpack('S4',$packed);
9,
print_r($nums);
Array
               (
                   [1] => 1974
                   [2] => 106
                   [3] => 28225
                   [4] => 32725
               )
0,
print_r($nums);
Array
               (
                   [1] => 1974
                   [2] => 106
                   [3] => 28225
                   [4] => 32725
               )
1 và
print_r($nums);
Array
               (
                   [1] => 1974
                   [2] => 106
                   [3] => 28225
                   [4] => 32725
               )
2, một số sau ký tự định dạng cho biết độ dài của chuỗi. Ví dụ:
$nums = unpack('S4num',$packed);
print_r($nums);
Array
               (
                   [num1] => 1974
                   [num2] => 106
                   [num3] => 28225
                   [num4] => 32725
               )
78 có nghĩa là chuỗi đệm khoảng trắng gồm 25 ký tự. Đối với các ký tự định dạng khác, một số sau đây có nghĩa là có bao nhiêu loại đó xuất hiện liên tiếp trong một chuỗi. Sử dụng
$nums = unpack('S4num',$packed);
print_r($nums);
Array
               (
                   [num1] => 1974
                   [num2] => 106
                   [num3] => 28225
                   [num4] => 32725
               )
79 để lấy phần còn lại của dữ liệu có sẵn

Bạn có thể chuyển đổi giữa các loại dữ liệu với

$nums = unpack('S4',$packed);
8. Ví dụ này điền vào mảng
$nums = unpack('S4',$packed);
71 với các giá trị ASCII của mỗi ký tự trong
$nums = unpack('S4',$packed);
72

Làm cách nào để tính kích thước byte của một chuỗi trong PHP?

Như hướng dẫn nói. " strlen() trả về số byte thay vì số ký tự trong một chuỗi . ", vì vậy nếu bạn muốn lấy số ký tự trong một chuỗi UTF8, hãy sử dụng mb_strlen() thay vì strlen(). $length = strlen(utf8_decode($s));

Làm cách nào để lấy kích thước của chuỗi PHP?

Hàm strlen() trả về độ dài của chuỗi.

Làm cách nào để chuyển đổi byte thành chuỗi trong PHP?

5 câu trả lời .
array_map() Sau đó, nó đơn giản như. $string = implode(array_map("chr", $bytes));
foreach() Đây là phiên bản nhỏ gọn của. .
pack() Nhưng cách thay thế được khuyến khích nhất có thể là sử dụng pack("C*", [$array. ]) , mặc dù nó yêu cầu một giải pháp thay thế mảng thú vị trong PHP để chuyển danh sách số nguyên

Hàm nào trả về số byte của một chuỗi?

LENB trả về số byte được sử dụng để biểu thị các ký tự trong chuỗi văn bản.