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.