java 用于反转字节顺序/更改字节顺序的命令行

w6lpcovy  于 2022-12-21  发布在  Java
关注(0)|答案(7)|浏览(161)

我正在破解一些脚本,试图解析Javas DataOutputStream#writeLong(...)写的一些数据。由于java似乎总是写big endian,所以我在向od提供字节时遇到了问题。这是因为od总是假设字节序与您当前使用的arch的字节序匹配,而我使用的是一个little endian机器。
我正在寻找一个简单的单行程序来反转字节顺序,假设您知道一个文件的最后8个字节是由前面提到的writeLong(...)方法编写的long,我目前打印这个long的最佳尝试是

tail -c 8 file | tac | od -t d8

,但是tac似乎只对文本有效(很公平),我发现了一些对dd conv=swab的引用,但是这只能成对地交换字节,并且不能反转这八个字节。
有人知道一个好的俏皮话吗?

mutmk8jj

mutmk8jj1#

您可以使用objcopy:

$ objcopy -I binary -O binary --reverse-bytes=num inputfile.bin outputfile.bin

其中num是2或4。

kse8i1jr

kse8i1jr2#

最后求助于Perl,使用了我在PERL One Liners找到的一行程序:

tail -c 8 file | perl -0777e 'print scalar reverse <>' | od -t d8

0777分隔符对我来说有点费解,但是debian admin的this页面似乎暗示它是“无记录分隔符”的占位符,触发了一个完全相反的逐字节。
欢迎提出其他建议。
编辑:在tac. c的注解中发现了另一个命令,我从GNU coreutils下载了这个命令:
将每个文件或标准输入(如果未给定或遇到文件名“-”)复制到标准输出,并颠倒记录的顺序。记录由字符串示例分隔,如果未给定,则由换行符分隔。默认情况下,分隔符字符串附加到文件中它所跟随的记录的末尾。
选项:-B,--before分隔符附加到文件中它前面的记录的开头。-r,--regex分隔符是正则表达式。-s,--separator=separator使用SEPARATOR作为记录分隔符。
要逐字节反转文件,请使用(在bash、ksh或sh中):tac -r -s“.|”文件

xxb16uws

xxb16uws3#

用过dd卢克!

dd if=sourcefile of=resultfile conv=swab
xv8emn3q

xv8emn3q4#

注意,下一个版本的GNUcoreutils(〉= 8.23)将在od命令中添加--endian={little,big}选项

3j86kqsm

3j86kqsm5#

我提出了这个Perl一行程序,用于将4字节整数从一种字节序转换为另一种字节序:

$ perl -e 'open F,shift; do { read(F,$a,4); print scalar reverse($a);} while(!eof(F));' bigend.bin > littlend.bin

这在真实的的Linux机器上可能工作得很好,但是Cygwin最后咬了我一口,把二进制文件当作文本,并在每个0x0A字节(又称换行符)之前插入一个0x0D(又称CR)。但是如果你用管道连接到cat -,它似乎不去管它。

$ perl -e 'open F,shift; do { read(F,$a,4); print scalar reverse($a);} while(!eof(F));' bigend.bin | cat - > littlend.bin
ni65a41a

ni65a41a6#

巴斯:

od -b -v -w8 | while read pfx b8 ; do [ "$b8" ] && echo -n 12345678 | tr 87654321 \\${b8// /\\} ; done

根据od的输出样式,为了更健壮一些,它可能需要压缩空格(在w8之后插入"| sed 's/ */ /g'")。

2admgd59

2admgd597#

xxd有两个标志-e-g可供您使用。

-e          little-endian dump (incompatible with -ps,-i,-r).
    -g          number of octets per group in normal output. Default 2 (-e: 4).

这样,您可以执行以下操作:

tail -c 8 file | xxd -e -g8

相关问题