문제

겠지만 컴퓨터 시스템의 과정을 수립 확인, 는 경우에,내 AMD 기반 컴퓨터에 조금 endian 기?나는 그것을 믿는 것 때문에 인텔 호환됩니다.

특히,나의 프로세서는 AMD Athlon64x2.

다는 것을 저는 이해 할 수 있습 문제에서는 C 프로그래밍입니다.내가 쓰는 C 프로그램 및 방법을 사용하는 것 이것에 의해 영향을 받습니다.내가 알아내려는 경우 나는 같은 결과를 얻는 경우가 프로그램에서 인텔®기반으로 기계(정 작은 endian 기계).

마지막으로,하자 요구 this:모든이며,모든 시스템을 실행할 수 있 Windows(XP,Vista,2000,Server2003,etc.),말, 우분투 리눅스 데스크톱 수은 endian?

감사합니다,

도움이 되었습니까?

해결책

모든 x86 및 x86-64 기계 (x86으로 확장)는 리틀 엔디언입니다.

다음과 같이 확인할 수 있습니다.

#include <stdio.h>
int main() {
    int a = 0x12345678;
    unsigned char *c = (unsigned char*)(&a);
    if (*c == 0x78) {
       printf("little-endian\n");
    } else {
       printf("big-endian\n");
    }
    return 0;
}

다른 팁

Endiannes를 알 수있는 쉬운 방법이 기사에 나열되어 있습니다. c

const int i = 1;
#define is_bigendian() ( (*(char*)&i) == 0 )

Python이 설치되어 있다고 가정하면 Little-Endian 기계에서 "Little"을 인쇄하고 Big-Endian 제품군에 "Little"을 인쇄하는이 One-Liner를 실행할 수 있습니다.

python -c "import struct; print 'little' if ord(struct.pack('L', 1)[0]) else 'big'"

"Intel 호환되지 않습니다"아주 정확합니다.

Intel 를 만드는 데 사용-endian 프로세서에서,특히 스트롱 및 XScale.이러한 사용하지 않 IA32ISA,일반적으로 알려진 x86.

더 역사에 다시,또한 인텔들 little-endian i860 및 i960 는 또한되지 않 86 호환됩니다.

더 뒤에서 역사,prececessors 의 x86(8080,8008,etc.) 되지 않 86 호환다.는 8 비트 프로세서,엔디안 정말 중요하지 않...

요즘에는 인텔은 여전히 만드는 Itanium(IA64),는 bi-endian:정상적인 작업이-endian 지만,프로세서에서 실행될 수도 있습 little-endian 모니다.그것은 일어나지 않을 실행할 수 있 86 코드에 little-endian 모드지만,기본사 IA32.

내 지식의 모든 AMD 의 프로세서가 86 호환으로,어떤 확장자처럼 x86_64 있으며,따라서 반드시 little-endian.

우분투은 x86(little-endian)및 x86_64(little-endian),적은 완전한 포트에 대한 ia64(big-endian),팔(el)(little-endian),PA-RISC(big-endian 지만,프로세서를 모두 지원합),PowerPC(big-endian),그리고 SPARC(big-endian).내가 하는 것을 믿지 않는 ARM(eb)(-endian)포트가 있습니다.

마지막 질문에 대한 답변으로 답은 아니오입니다. Linux는 이전 세대 PowerMacs 인 EG와 같은 Big Endian 머신에서 실행할 수 있습니다.

Big Endian Machines를 위해 설계된 Ubuntu 버전을 다운로드해야합니다. 나는 단지 만 알고있다 powerpc 버전. 더 일반적인 대기업 구현이있는 곳을 찾을 수 있다고 확신합니다.

/* by Linas Samusas  */

#ifndef _bitorder 
#define _bitorder 0x0008

#if (_bitorder > 8)
#define BE
#else
#define LE
#endif

그리고 이것을 사용하십시오

#ifdef LE
#define Function_Convert_to_be_16(value)  real_function_to_be_16(value)
#define Function_Convert_to_be_32(value)  real_function_to_be_32(value)
#define Function_Convert_to_be_64(value)  real_function_to_be_64(value)
#else
#define Function_Convert_to_be_16
#define Function_Convert_to_be_32
#define Function_Convert_to_be_64
#endif

Le

unsigned long number1 = Function_Convert_to_be_16(number2);

*매크로는 실제 기능을 호출하면 변환됩니다.

경우

unsigned long number1 = Function_Convert_to_be_16(number2);

*매크로는 함수가 아닌 단어로 정의되며 숫자는 괄호 사이에 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top