Phân tích tệp nhị phân trong PHP

Các tệp dữ liệu mã nhị phân được sử dụng để lập trình bằng các ngôn ngữ lập trình cấp thấp được sử dụng một cách khoa học, như C, không thể được dịch một cách mạch lạc thành định dạng văn bản.

Sử dụng bất kỳ ngôn ngữ cấp thấp nào để lưu trữ một giá trị nhất định, mã nhị phân phải được sử dụng khi bạn tải nó trong trình soạn thảo văn bản để ghi hoặc đọc nó.

Không thể đọc tệp nhị phân vì nó ở định dạng nhị phân thô trong các ngôn ngữ như Pascal. Do đó, quản trị web sử dụng PHP để đọc và ghi các tệp dưới dạng văn bản. Một chức năng cụ thể phải được sử dụng để lấy giá trị của bạn.

PHP sử dụng một hàm duy nhất gọi là unpack (). Sau khi đối số kiểu dữ liệu đầu tiên được khai báo, bạn cần khôi phục và tạo đối số thứ hai dưới dạng chuỗi mà bạn muốn truy xuất dữ liệu. Các dữ liệu có thể phục hồi phải trong các đối số tượng trưng.

Khi sử dụng các ngôn ngữ cấp thấp như C hoặc Pascal, đây là một quy trình phổ biến để lưu trữ dữ liệu trong tệp nhị phân (bản ghi không thể dịch thành văn bản).

Sử dụng ngôn ngữ C, nếu bạn muốn lưu giá trị 500 trong một tệp, mã sẽ như sau:

 #include int main () {int val = 500; TẬP_TIN * fp = fopen ("tập tin", "wb"); fwrite (& val, sizeof (int), 1, fp); // lưu trữ val trong "file" fclose (fp); trả về 0; } 

Khi mở tệp cụ thể này bằng trình soạn thảo văn bản, bạn có thể thấy nó không thể đọc được vì giá trị của bạn không được lưu dưới dạng văn bản mà ở dạng thô nhị phân.

Nhưng, nếu bạn sử dụng PHP, thường thì cần phải truy xuất các giá trị được lưu trữ dưới dạng nhị phân theo thời gian. Tuy nhiên, PHP đọc và ghi trong các tệp dưới dạng văn bản. Một chức năng cụ thể phải được sử dụng để lấy giá trị của bạn.

Giải pháp:

Hàm unpack () có thể được sử dụng để giải quyết loại vấn đề này. Trước tiên, bạn phải khai báo loại dữ liệu bạn muốn khôi phục và sau đó là chuỗi mà bạn muốn truy xuất dữ liệu.

Loại dữ liệu cần phục hồi phải được chi tiết bằng ký hiệu tương ứng. Ví dụ: để lấy một số nguyên đã ký, hãy sử dụng ký tự i .

Vì vậy, nếu chúng tôi sử dụng tệp mà chúng tôi đã lưu trong ví dụ trên, đây là mã để truy xuất giá trị của chúng tôi:

    • Lưu ý quan trọng:
  • Kích thước dữ liệu có thể thay đổi tùy theo kiến ​​trúc bộ xử lý (Sparc, ARM, PowerPC).
    • Một chương trình được viết bằng C sử dụng các số nguyên có kích thước khác nhau từ 32 bit đến 64 bit.
    • Việc sắp xếp dữ liệu có thể không giống nhau. Một số máy lưu trữ dữ liệu trong Big Endian, một số khác ở Little Endian.
    • Kích thước dữ liệu có thể thay đổi tùy thuộc vào trình biên dịch
    • Hàm giải nén trả về một mảng phức tạp hơn một chút mà hàm được đưa ra làm ví dụ ở đây. Trong trường hợp của chúng tôi, với một giá trị được yêu cầu, giá trị của chúng tôi nằm ở phần bù 1 của mảng.
  • Kiểu dữ liệu cho PC 32 bit
    • Dưới đây là bảng hiển thị dữ liệu được ghi lại bởi chương trình C được biên dịch cho PC 32 bit:
    • char : c
    • ký tự không dấu : C
    • ngắn : s
    • không dấu ngắn : S
    • int : tôi
    • unsign int : L
    • phao : f
    • gấp đôi : d

Bài TrướC TiếP Theo Bài ViếT

Lên Trên LờI Khuyên