Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix中的端性_Unix_Endianness_Hexdump - Fatal编程技术网

Unix中的端性

Unix中的端性,unix,endianness,hexdump,Unix,Endianness,Hexdump,以下*nix命令将IP和端口(127.0.0.1:80)的十六进制表示形式传输到hextump命令中 printf "\x7F\x00\x00\x01\x00\x50" | hexdump -e '3/1 "%u." /1 "%u:" 1/2 "%u" "\n"' -e标志允许使用任意格式解析输入。在本例中,我们将IP的前三个八位字节解析为后跟一个点的无符号小数。最后的八位字节也被解析为无符号十进制,但后面跟一个冒号。最后——这就是问题所在——端口的2个字节被解析为一个无符号小数,后跟一个换行

以下*nix命令将IP和端口(127.0.0.1:80)的十六进制表示形式传输到hextump命令中

printf "\x7F\x00\x00\x01\x00\x50" | hexdump -e '3/1 "%u." /1 "%u:" 1/2 "%u" "\n"'
-e标志允许使用任意格式解析输入。在本例中,我们将IP的前三个八位字节解析为后跟一个点的无符号小数。最后的八位字节也被解析为无符号十进制,但后面跟一个冒号。最后——这就是问题所在——端口的2个字节被解析为一个无符号小数,后跟一个换行符

根据执行此命令的系统的终止性,结果将有所不同。大端系统将正确显示端口80;而一个小小的endian系统将显示端口20480


有没有办法操纵hextump来了解endianness,同时仍然允许通过-e进行任意格式规范?

我不知道使用hextump可以做到这一点,但这很简单 在perl中:

$ printf '\x00\x50' | perl -nE 'say unpack "S>"' 80 $ printf '\x00\x50' | perl -nE 'say unpack "S<"' 20480 $printf'\x00\x50'| perl-nE'说unpack“S>”' 80
$printf'\x00\x50'| perl-nE'say unpack“SI假设,如果平台是little endian,那么必须通过交换最后两个字节来准备输入是不可接受的,因为你在问这个问题?看起来有必要进行字节交换吗?我不想使用C/Perl/Python,只想使用更基于工具的方法。也许是xxd替代品?