누구든지 시스템이 Big Endian인지 Little Endian인지보고하는 명령을 알고 있습니까? 아니면 Perl 또는 일련의 명령을 사용하여 이와 같은 기술을 사용하는 것이 가장 좋습니다.
펄
# little
$ perl -MConfig -e 'print "$Config{byteorder}\n";'
12345678
# big
$ perl -MConfig -e 'print "$Config{byteorder}\n";'
87654321
od | 어 wk
# little
$ echo -n I | od -to2 | awk 'FNR==1{ print substr($2,6,1)}'
1
# big
$ echo -n I | od -to2 | awk 'FNR==1{ print substr($2,6,1)}'
0
참고 문헌
답변
lscpu
이 lscpu
명령은 다음과 같이 표시됩니다.
Byte Order: Little Endian
이것이 작동하는 것으로 알려진 시스템
- CentOS 6
- 우분투 (12.04, 12.10, 13.04, 13.10, 14.04)
- 페도라 (17,18,19)
- 아치 리눅스 2012+
- 리눅스 민트 데비안 (따라서 데비안 테스트도 가정).
작동하지 않는 것으로 알려진 시스템
- 페도라 14
- CentOS 5 (이로 인해 RHEL5로 가정)
왜 배포판에 명백한 차이점이 있습니까?
많이 파고 난 후 이유를 알았습니다. util-linux 버전 2.19는 lscpu
시스템의 Endianness를보고하는 출력을 보여주는 기능을 포함하는 첫 번째 버전 인 것 같습니다 .
테스트로 Fedora 14 시스템에서 버전 2.18 및 2.19를 모두 컴파일했으며 아래 출력에 차이점이 표시됩니다.
유틸리티 리눅스 2.18
$ util-linux-ng-2.18/sys-utils/lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
CPU(s): 4
Thread(s) per core: 2
Core(s) per socket: 2
CPU socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 37
Stepping: 5
CPU MHz: 1199.000
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 3072K
NUMA node0 CPU(s): 0-3
유틸리티 리눅스 2.19
$ util-linux-2.19/sys-utils/lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 2
Core(s) per socket: 2
CPU socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 37
Stepping: 5
CPU MHz: 2667.000
BogoMIPS: 5320.02
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 3072K
NUMA node0 CPU(s): 0-3
위의 버전은 kernel.org 웹 사이트 에서 다운로드되었습니다 .
답변
데비안 / 우분투 시스템에서 찾은 한 가지 방법은이 명령을 실행하는 것입니다.
$ dpkg-architecture
DEB_BUILD_ARCH=amd64
DEB_BUILD_ARCH_BITS=64
DEB_BUILD_ARCH_CPU=amd64
DEB_BUILD_ARCH_ENDIAN=little
DEB_BUILD_ARCH_OS=linux
DEB_BUILD_GNU_CPU=x86_64
DEB_BUILD_GNU_SYSTEM=linux-gnu
DEB_BUILD_GNU_TYPE=x86_64-linux-gnu
DEB_BUILD_MULTIARCH=x86_64-linux-gnu
DEB_HOST_ARCH=amd64
DEB_HOST_ARCH_BITS=64
DEB_HOST_ARCH_CPU=amd64
DEB_HOST_ARCH_ENDIAN=little
DEB_HOST_ARCH_OS=linux
DEB_HOST_GNU_CPU=x86_64
DEB_HOST_GNU_SYSTEM=linux-gnu
DEB_HOST_GNU_TYPE=x86_64-linux-gnu
DEB_HOST_MULTIARCH=x86_64-linux-gnu
시스템 구성에 따라 작거나 큰 단어가 표시됩니다.
$ dpkg-architecture | grep -i end
DEB_BUILD_ARCH_ENDIAN=little
DEB_HOST_ARCH_ENDIAN=little
답변
사용 python
:
$ python -c "import sys;print sys.byteorder"
little
또는:
printf '\1' | od -dAn
1
1
리틀 엔디안과 빅 엔디안은 어디에 있습니까 00256
?
또는 더 짧은 perl
버전을 사용하는 경우 :
$ perl -V:byteorder
byteorder='12345678';
답변
POSIX Shell & C 솔루션 :
cat << EOF > foo.c
#include <endian.h>
#include <stdio.h>
int main() {
printf("Byte Order: ");
if (BYTE_ORDER == LITTLE_ENDIAN)
printf("little");
else {
if (BYTE_ORDER == BIG_ENDIAN)
printf("big");
else
printf("unknown");
}
printf(" endian.\n");
return 0;
}
EOF
gcc -D__USE_POSIX foo.c
./a.out
답변
다음이없는 시스템 인 경우 endian.h
:
#include <stdio.h>
int main() {
int test = 0;
char *bytes = (char *) &test;
*bytes = 0x1;
printf("Byte Order: ");
if (test == 1){
printf("little");
}
else {
printf("big");
}
printf(" endian.\n");
return 0;
}