有谁知道报告系统是 Big Endian 还是 Little Endian 的命令,或者最好的选择是使用 Perl 或一串命令的技术?
珀尔
# little
$ perl -MConfig -e 'print "$Config{byteorder}\n";'
12345678
# big
$ perl -MConfig -e 'print "$Config{byteorder}\n";'
87654321
OD | awk
# 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
参考
答案1
LSCPU
该lscpu
命令显示(除其他外):
Byte Order: Little Endian
已知可以运行的系统
- 操作系统6
- 乌班图(12.04、12.10、13.04、13.10、14.04)
- 软呢帽 (17,18,19)
- ArchLinux 2012+
- Linux Mint Debian(因此假设也进行 Debian 测试)。
已知此系统无法运行
- 软呢帽 14
- CentOS 5(因此假设是 RHEL5)
为什么发行版之间存在明显差异?
经过多次挖掘,我找到了原因。看起来 util-linux 版本 2.19 是第一个包含以下功能的版本:向lscpu
您显示报告系统字节顺序的输出。
作为测试,我在 Fedora 14 系统上编译了 2.18 和 2.19 版本,下面的输出显示了差异:
实用程序Linux 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
实用程序Linux 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 网站。
答案2
使用python
:
$ python -c "import sys;print sys.byteorder"
little
或者:
printf '\1' | od -dAn
1
其中1
是小端和00256
大端。
或者使用较短的perl
版本:
$ perl -V:byteorder
byteorder='12345678';
答案3
我在 Debian/Ubuntu 系统上发现的一种方法是运行以下命令:
$ 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
答案4
如果您使用的系统没有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;
}