Jak*_*son 110 central-processing-unit
我知道某些处理器是 Big Endian,而其他处理器是 Little Endian。但是是否有命令、bash 脚本、python 脚本或一系列命令可以在命令行中使用来确定系统是 Big Endian 还是 Little Endian?就像是:
if <some code> then
echo Big Endian
else
echo Little Endian
fi
Run Code Online (Sandbox Code Playgroud)
还是仅确定系统正在使用的处理器并使用它来确定其 Endianess 是否更简单?
kri*_*ssi 131
在大端系统上(SPARC 上的 Solaris)
$ echo -n I | od -to2 | head -n1 | cut -f2 -d" " | cut -c6
Run Code Online (Sandbox Code Playgroud)
0
在小端系统上(x86 上的 Linux)
$ echo -n I | od -to2 | head -n1 | cut -f2 -d" " | cut -c6
Run Code Online (Sandbox Code Playgroud)
1
上面的解决方案很聪明,非常适合 Linux *86 和 Solaris Sparc。
我需要一个也适用于 AIX/Power 和 HPUX/Itanium 的纯 shell(无 Perl)解决方案。不幸的是,最后两个不太好:AIX 报告“6”,HPUX 给出一个空行。
使用您的解决方案,我能够制作出适用于所有这些 Unix 系统的东西:
$ echo I | tr -d [:space:] | od -to2 | head -n1 | awk '{print $2}' | cut -c6
关于某人发布的 Python 解决方案,它在 Jython 中不起作用,因为 JVM 将所有内容都视为 Big。如果有人可以让它在 Jython 中工作,请发帖!
另外,我发现了这个,它解释了各种平台的字节序。根据操作系统选择的内容,某些硬件可以在任一模式下运行:http : //labs.hoffmanlabs.com/node/544
如果您打算使用 awk,这一行可以简化为:
echo -n I | od -to2 | awk '{ print substr($2,6,1); exit}'
Run Code Online (Sandbox Code Playgroud)
对于没有“od”的小型 Linux 机器(比如 OpenWrt),请尝试“hexdump”:
echo -n I | hexdump -o | awk '{ print substr($2,6,1); exit}'
Run Code Online (Sandbox Code Playgroud)
dot*_*hen 52
如果您使用的是相当新的 Linux 机器(大多数是 2012 年之后的机器),那么lscpu现在包含以下信息:
$ lscpu | grep Endian
Byte Order: Little Endian
Run Code Online (Sandbox Code Playgroud)
这是lscpu在 2.19 版本中添加的,该版本可在 Fedora >= 17、CentOS >= 6.0、Ubuntu >= 12.04 中找到。
请注意,我从Unix.SE 上的这个很棒的答案中找到了这个答案。那个答案有很多相关信息,这篇文章只是它的一个总结。
小智 33
这是一个更优雅的python单行脚本
python -c "import sys;sys.exit(0 if sys.byteorder=='big' else 1)"
Run Code Online (Sandbox Code Playgroud)
退出代码0表示大端和1小端
或者只是改变sys.exit到print的打印输出
slm*_*slm 10
可以使用awk以下方法稍微简化主要答案:
在 Big Endian 系统上(Solaris、SPARC)
$ echo -n I | od -to2 | awk 'FNR==1{ print substr($2,6,1)}'
0
Run Code Online (Sandbox Code Playgroud)
在 Little Endian 系统上(Linux、Intel)
$ echo -n I | od -to2 | awk 'FNR==1{ print substr($2,6,1)}'
1
Run Code Online (Sandbox Code Playgroud)
从 util-linux 包的 2.19 版lscpu开始,该命令开始包含与 Endianness 相关的字段。所以现在你可以简单地使用这个命令来找出这个:
$ lscpu | grep -i byte
Byte Order: Little Endian
Run Code Online (Sandbox Code Playgroud)
这已经在 Ubuntu 12.10 和 CentOS 6 上得到确认。所以我愿意假设大多数 3.0+ Linux 内核现在都提供这个。
在 Debian/Ubuntu 系统上,您也可以使用此命令,但不确定何时可用:
$ dpkg-architecture | grep -i end
DEB_BUILD_ARCH_ENDIAN=little
DEB_HOST_ARCH_ENDIAN=little
Run Code Online (Sandbox Code Playgroud)
这个 Python 脚本应该适合你:
#!/usr/bin/env python
from struct import pack
if pack('@h', 1) == pack('<h', 1):
print "Little Endian"
else:
print "Big Endian"
Run Code Online (Sandbox Code Playgroud)
小智 8
python -c "import sys; print(sys.byteorder)"
Run Code Online (Sandbox Code Playgroud)
它将打印系统的字节序。
| 归档时间: |
|
| 查看次数: |
178583 次 |
| 最近记录: |