hexdump so với nội dung tập tin thực tế


16

Khi tôi làm, hexdump filename.txttôi nhận được như sau:

00000000 ac5a 5afb c08d 5d15 26d0 2491 e8c9 8917
00000010 

Khi tôi làm <?= bin2hex(file_get_contents('filename.txt')); ?>tôi nhận được điều này:

5aacfb5a8dc0155dd0269124c9e81789

Vậy tại sao hexdump lại gợi ý nội dung nên là ac5a5afbc08d5d1526d02491e8c98917khi PHP đề xuất chúng phải như 5aacfb5a8dc0155dd0269124c9e81789vậy? Tôi chỉ không giải thích đầu ra của hexdump chính xác?


Câu trả lời:


24

Sự khác biệt là thứ tự lớn về cuối so với cuối nhỏ .

Bắt đầu với bốn byte đầu ra của hexdump : ac5a 5afb. Bây giờ chuyển thứ tự byte để có được:

5aac fb5a

So sánh điều này với đầu ra PHP:

5aac fb5a

Họ hợp nhau.

Theo mặc định, BSD hexdumphiển thị đầu ra dựa trên độ bền của máy. Nếu bạn không muốn điều đó, bạn có thể chỉ định -Ctùy chọn để nhận từng byte đầu ra thay vì từng chữ:

$ hexdump filename.txt 
0000000 ac5a 5afb c08d 5d15 26d0 2491 e8c9 8917
0000010
$ hexdump -C filename.txt 
00000000  5a ac fb 5a 8d c0 15 5d  d0 26 91 24 c9 e8 17 89  |Z..Z...].&.$....|
00000010

4
Để thêm một bit: hexdump đang hiển thị dữ liệu được hiểu là các từ mười sáu bit. bin2hex đang hiển thị một byte mỗi lần, như vậy sẽ phù hợp với các ký tự ASCII hoặc tương tự. Trên x86 và x64 (và các CPU nhỏ khác), byte đầu tiên của số nguyên nhiều byte chứa các bit có trọng số thấp nhất. Vì vậy, nếu điều đầu tiên trong tệp của bạn là số nguyên 16 bit chứa giá trị 1, hiển thị dưới dạng byte sẽ hiển thị 01 00, nhưng hiển thị dưới dạng từ 16 bit sẽ hiển thị 0001 (thứ tự đọc tự nhiên, LSB ở bên phải, như chúng ta làm trong việc sử dụng số thập phân hàng ngày). vi.wikipedia.org/wiki/Endianness
Jamie Hanrahan

Để thêm vào nhận xét của @ JamieHanrahan, hãy đọc: "và tất cả các CPU nhỏ cuối cùng khác", vì đây là điểm chính của endianness.
glglgl
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.