2011-12-31 4 views
0

가능한 중복 : 왜 fwrite는 16 진수 값을 거꾸로 출력합니까?


Why does C print my hex values incorrectly?

내가 바이너리 파일로 출력에 fwrite 정보 해요하지만 난 진수에 대한 xxd 출력에서 ​​볼 때 순서에 있지 않습니다. 바이너리 파일이 어떻게 보일 것인가?

코드는 목적지로 인쇄 :

int delim[] = { 0xabcd1234 }; 
    fwrite(delim, 4, 1, destination); 
    char buffer[] = "I like dog"; 
    fwrite(buffer, 1, 10, destination); 

xxd 출력 :

0000000: 3412 cdab 4920 6c69 6b65 2064 6f67  4...I like dog 

그 방법 프로세서는 분명히이기 때문에 당신은 16 진수가 3412 cdab 대신 ABCD1234

답변

4

입니다 볼 수 있듯이 정수를 저장합니다. 위키 백과에이 약

더 - Endianness

+1

그것은 운영 체제가 아니라 엔디 언을 시행 프로세서 . –

+0

@AlanHaggaiAlavi That 's says :-) –

+0

그러나 편집하기 전에는 그렇지 않았습니다. :-) –

0

그것은 프로세서에 의해 정수를 저장하는 리틀 엔디안 방법입니다.

3

Tom van Woredt가 지적했듯이, 이것은 엔디안 문제입니다 (xxd 문제 일 수 있습니다. 이중 바이트가 아닌 단일 바이트를 덤프하십시오). 당신은 진수가 파일에 특정 순서에 있는지 확인하려면

대신, 부호없는 문자의 배열을 사용

unsigned char delim[] = {0xab, 0xcd, 0x12, 0x34}; 
fwrite(delim, sizeof *delim, sizeof delim, destination); 
관련 문제