두 기계 수L 및 B를 보자. L 위해 그 비트에서 LSB (최하위 비트) MSB (최상위 비트) B MSB에서 LSB 순서 됨과한다. 즉, L은 Little Endian을 사용하는 반면 B은 Big Endian 비트을 사용하며 바이트 순서와 혼동하지 마십시오.비트 엔디안은 C에서 비트 단위 시프트 및 파일 IO에 어떤 영향을 줍니까?
문제 1 이 해결 :
우리는 우리가 이식 할 다음 코드 작성 :
#include <stdio.h>
int main()
{
unsigned char a = 1;
a <<= 1;
printf("a = %d\n", (int) a);
return 0;
}
L에를, 그것은 2를 인쇄하지만, 무엇 B에서 발생? 1을 이동하여 0을 인쇄합니까?
SOLUTION : 6.5.7에서 정의 C99 적어도 부호없는 정수 형태에 <<
및 >>
각각 2 곱 나눈 것이다 그것은, 말한다.
문제 2 :
우리는 우리가 이식 할 다음 코드 작성 :
READ 프로그램 :
/* program READ */
#include <stdio.h>
int main()
{
FILE* fp;
unsigned char a;
fp = fopen("data.dat", "rb");
fread(&a, 1, 1, fp);
fclose(fp);
return 0;
}
및 WRITE 프로그램 :
/* program WRITE */
#include <stdio.h>
int main()
{
FILE* fp;
unsigned char a = 1;
fp = fopen("data.dat", "wb");
fwrite(&a, 1, 1, fp);
fclose(fp);
return 0;
}
무엇 L에 쓰기를 실행하면 발생합니다., mo 데이터 파일을 B 및 으로 실행 하시겠습니까? 우리가 B에 쓰기를 실행하고 있다면 다음 L에 읽어?
죄송합니다. FAQ입니다. 나는 운이없이 몇 시간 동안 봤어.
그래서 파일의 입출력 (endianness)이 파일 IO와 관련이 없다고 말합니다. 어떤 종류의 표준인가요? 그렇다면 링크가 정의 된 위치에 게시 할 수 있습니까? – rogi
이제 이것이 의미가 있습니다. – rogi
파일 I/O가 전체 바이트 읽기로 정의됩니다. 파일에서 1 바이트 미만을 읽을 수는 없습니다. 비트 순서는 저장 매체 (SCSI, SATA, USB Mass Storage 등)에 대한 인터페이스에 따라 다르며 직렬 인터페이스 (예 : SATA butnot PATA) 만 영향을받는다고 생각합니다. – tomlogic