내 AMD-기반으로 기계를 사용 작 endian 또는 big endian?
-
06-07-2019 - |
문제
겠지만 컴퓨터 시스템의 과정을 수립 확인, 는 경우에,내 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);
*매크로는 함수가 아닌 단어로 정의되며 숫자는 괄호 사이에 있습니다.