16 진 덤프 대 실제 파일 내용


16

내가 hexdump filename.txt출력 할 때 다음을 얻습니다.

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

내가 할 때 나는 <?= bin2hex(file_get_contents('filename.txt')); ?>이것을 얻는다 :

5aacfb5a8dc0155dd0269124c9e81789

그렇다면 왜 hexdump ac5a5afbc08d5d1526d02491e8c98917가 PHP가 제안 해야 할 때 내용을 제안해야 5aacfb5a8dc0155dd0269124c9e81789합니까? 16 진수 덤프의 출력을 올바르게 해석하지 못합니까?


답변:


24

차이점은 빅 엔디안 대 리틀 엔디안 순서 입니다.

hexdump 출력의 처음 4 바이트로 시작하십시오 ac5a 5afb. 이제 바이트 순서를 바꾸어 다음을 얻으십시오.

5aac fb5a

이것을 PHP 출력과 비교하십시오.

5aac fb5a

일치합니다.

기본적으로 BSD hexdump는 시스템의 엔디안을 기반으로 출력을 표시합니다. 원하지 않으면 -C단어 단위로 출력하는 것이 아니라 바이트 단위로 출력 하는 옵션을 지정할 수 있습니다 .

$ 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
비트 추가하기 : hexdump는 16 비트 워드로 해석 된 데이터를 보여줍니다. bin2hex는 ASCII 문자 또는 이와 유사한 경우에 한 번에 한 바이트 씩 표시됩니다. x86 및 x64 (및 기타 리틀 엔디안 CPU)에서 멀티 바이트 정수의 첫 번째 바이트에는 최하위 비트가 포함됩니다. 따라서 파일의 첫 번째 항목이 값 1을 포함하는 16 비트 정수인 경우 바이트로 표시하면 01 00이지만 16 비트 워드로 표시하면 0001 (오른쪽의 자연 읽기 순서 우리가 일상적으로 십진수를 사용할 때와 같이). en.wikipedia.org/wiki/Endianness
Jamie Hanrahan

@JamieHanrahan의 의견을 추가하려면 "및 기타 모든 리틀 엔디안 CPU"를 읽으십시오. 엔디안의 핵심 부분입니다.
glglgl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.