Hướng dẫn compile php to binary - biên dịch php sang nhị phân

Chuỗi trong PHP luôn là đốm màu. Vì vậy, bạn có thể sử dụng một chuỗi để giữ giá trị cho cơ sở dữ liệu của bạn. Tất cả các công cụ này chuyển đổi cơ sở và như vậy phải làm với việc trình bày blob đó.

Nếu bạn muốn một đại diện tốt cho con người có thể đọc được của BLOB thì thật hợp lý khi hiển thị các byte mà nó chứa, và có lẽ để sử dụng Hex chứ không phải là thập phân. Do đó, chuỗi "41 42 43" là một cách tốt để trình bày mảng byte mà trong C# sẽ

var bytes = new byte[] { 0x41, 0x42, 0x43 };

Nhưng rõ ràng đó không phải là một cách tốt để đại diện cho những byte đó! Chuỗi "ABC" là một đại diện hiệu quả, bởi vì thực tế nó là cùng một blob (chỉ trong trường hợp này không quá lớn).

Trong thực tế, bạn thường sẽ nhận được các đốm màu của mình từ các chức năng trả về chuỗi - chẳng hạn như hàm băm đó hoặc các chức năng tích hợp khác như fread.

Trong những trường hợp hiếm (nhưng không quá hiếm khi chỉ thử mọi thứ/tạo mẫu) mà bạn chỉ cần xây dựng một chuỗi từ một số byte được mã hóa cứng, tôi không biết bất cứ điều gì hiệu quả hơn là chuyển đổi một "chuỗi hex" thành những gì Thường được gọi là "chuỗi nhị phân" trong PHP:

$myBytes = "414243";
$data = pack('H*', $myBytes);

Nếu bạn

$myBytes = "414243";
$data = pack('H*', $myBytes);
6 nó sẽ hiển thị cho bạn
$myBytes = "414243";
$data = pack('H*', $myBytes);
7. Đó là bởi vì 0x41 = 65 thập phân = 'A' (về cơ bản là tất cả các mã hóa).

Vì xem dữ liệu nhị phân bằng cách diễn giải nó dưới dạng chuỗi không chính xác trực quan, bạn có thể muốn làm cho một trình bao bọc cơ bản để làm cho việc gỡ lỗi dễ dàng hơn. Một cái bao có thể như vậy là

class blob
{
    function __construct($hexStr = '')
    {
        $this->appendHex($hexStr);
    }

    public $value;

    public function appendHex($hexStr)
    {
        $this->value .= pack('H*', $hexStr);
    }

    public function getByte($index)
    {
        return unpack('C', $this->value{$index})[1];
    }

    public function setByte($index, $value)
    {
        $this->value{$index} = pack('C', $value);
    }

    public function toArray()
    {
        return unpack('C*', $this->value);
    }
}

Đây là một cái gì đó tôi nấu ăn một cách nhanh chóng, và có lẽ chỉ là một điểm khởi đầu cho trình bao bọc của riêng bạn. Nhưng ý tưởng là sử dụng một chuỗi để lưu trữ vì đây là cấu trúc hiệu quả nhất có sẵn trong PHP, trong khi cung cấp các phương thức như Toarray () để sử dụng trong các đồng hồ/đánh giá của trình gỡ lỗi khi bạn muốn kiểm tra nội dung.

Tất nhiên, bạn có thể sử dụng một mảng PHP hoàn toàn đơn giản và đóng gói nó vào một chuỗi khi giao tiếp với thứ gì đó sử dụng chuỗi cho dữ liệu nhị phân. Tùy thuộc vào mức độ mà bạn thực sự sẽ sửa đổi Blob, điều này có thể chứng minh dễ dàng hơn và mặc dù nó không hiệu quả về không gian, tôi nghĩ rằng bạn sẽ có được hiệu suất chấp nhận được cho nhiều nhiệm vụ.

Một ví dụ để minh họa chức năng:

// Construct a blob with 3 bytes: 0x41 0x42 0x43.
$b = new blob("414243");

// Append 3 more bytes: 0x44 0x45 0x46.
$b->appendHex("444546");

// Change the second byte to 0x41 (so we now have 0x41 0x41 0x43 0x44 0x45 0x46).
$b->setByte(1, 0x41); // or, equivalently, setByte(1, 65)

// Dump the first byte.
var_dump($b->getByte(0));

// Verify the result. The string "AACDEF", because it's only ASCII characters, will have the same binary representation in basically any encoding.
$ok = $b->value == "AACDEF";

Trong ví dụ này, chúng tôi sẽ chuyển đổi chuỗi thành nhị phân và nhị phân thành chuỗi với PHP.

function strigToBinary($string)
{
$characters = str_split($string);

$binary = [];
foreach ($characters as $character) {
$data = unpack('H*', $character);
$binary[] = base_convert($data[1], 16, 2);
}

return implode(' ', $binary);
}

function binaryToString($binary)
{
$binaries = explode(' ', $binary);

$string = null;
foreach ($binaries as $binary) {
$string .= pack('H*', dechex(bindec($binary)));
}

return $string;
}

$string = 'inanzzz';
echo 'STRING: '.$string.PHP_EOL;
echo 'BINARY: '.$binary = strigToBinary($string).PHP_EOL;
echo 'STRING: '.binaryToString($binary).PHP_EOL;
STRING: inanzzz
BINARY: 1101001 1101110 1100001 1101110 1111010 1111010 1111010
STRING: inanzzz

Công cụ trực tuyến: Chuyển đổi chuỗi thành nhị phân trực tuyến

Lõi PHP, cung cấp một số chức năng để chuyển đổi dữ liệu giữa nhị phân, thập phân, thập lục phân và v.v. Nhưng làm thế nào để chuyển đổi từ chuỗi nhị phân sang nhị phân, chúng tôi cung cấp một số chức năng để làm điều đó.

Phương pháp 1: Sử dụng các chức năng Giải nén và Base_Convert

function strToBin($input)
    {
        if (!is_string($input))
            return false;
        $value = unpack('H*', $input);
        return base_convert($value[1], 16, 2);
    }

Example:

echo(strToBin('tuto')); //1110100011101010111010001101111

Nhưng với chuỗi dài, chúng ta có thể chuyển đổi

echo(strToBin('tutorialspots.com')); //0000000000000000000000000000000000000000000000000000000000000000

Do chức năng base_convert có thể làm việc với số lượng lớn. Giới hạn là:

$myBytes = "414243";
$data = pack('H*', $myBytes);
0

Những gì mà Sultion Sultion? Chúng ta có thể chia chuỗi thập lục phân thành các khối, chuyển đổi từng khối và tham gia chunk. Chúng ta phải thay đổi hàm trên:

$myBytes = "414243";
$data = pack('H*', $myBytes);
1

Thí dụ:

$myBytes = "414243";
$data = pack('H*', $myBytes);
2

Phương pháp 2: Sử dụng chức năng Decbin và Ord để chuyển đổi

$myBytes = "414243";
$data = pack('H*', $myBytes);
3

Thí dụ:

$myBytes = "414243";
$data = pack('H*', $myBytes);
4

Phương pháp 2: Sử dụng chức năng Decbin và Ord để chuyển đổi

Phương pháp 3:

Sử dụng mô -đun GMP