将十进制数序列转换为大端浮点数
Convert sequence of decimal numbers to Big endian float
我有一个外部软件使用存储为 4 字节浮点长序列的图像,如 Big Endian,没有 header。我可以使用 awk
创建一个小示例图像,因此我可以控制可能的分隔符,或者输出我的(浮点)数字序列,例如十六进制或十进制值。但是,我还没有找到将它作为 4 字节浮点数写入文件的方法。因此,我尝试使用 Perl 的包将我的十进制 base10 数字序列转换为 4 字节浮点数,Big Endian,它适用于单个值,但我的 Perl 经验太有限,无法让它适用于一系列值。
有更精通 Perl 的人能帮帮我吗?为了查看输出位序列,我将其通过管道传输到命令 xxd -b
perl -e "print pack('f>*',3)"|xxd -b # outputs decimal 3 (base10) on the wanted format:
# 01000000 01000000 00000000 00000000
perl -e "print pack('f>*',3,7,8)"|xxd -b # outputs the requested dummy sequence correctly
# 01000000 01000000 00000000 00000000 01000000 11100000
# 00000000 00000000 01000001 00000000 00000000 00000000
echo 1|awk 'BEGIN{printf("%d,%d,%d",3,7,8);}'|xxd -b # creates same dummy sequence, in awk - here separated by ,
echo 1|awk 'BEGIN{printf("%d,%d,%d",3,7,8);}'|perl -e "print pack('f>*',<STDIN>)"|xxd -b
# outputs correct conversion of 3, but seems to ignore 7 and 8
# 01000000 01000000 00000000 00000000
我想分隔符必须以不同的方式处理?我也尝试了这种形式的 Perl 部分
perl -ne 'print pack "f>*",$_'
感谢任何帮助。
替换
<STDIN>
和
split(/,/, <STDIN>)
此外,最好将 Perl 程序用单引号引起来。这里没有区别,但这是一个好习惯。
perl -e'print pack "f>*", split /,/, <STDIN>'
干净地处理换行符(如果有的话):
perl -ne'chomp; print pack "f>*", split /,/'
我有一个外部软件使用存储为 4 字节浮点长序列的图像,如 Big Endian,没有 header。我可以使用 awk
创建一个小示例图像,因此我可以控制可能的分隔符,或者输出我的(浮点)数字序列,例如十六进制或十进制值。但是,我还没有找到将它作为 4 字节浮点数写入文件的方法。因此,我尝试使用 Perl 的包将我的十进制 base10 数字序列转换为 4 字节浮点数,Big Endian,它适用于单个值,但我的 Perl 经验太有限,无法让它适用于一系列值。
有更精通 Perl 的人能帮帮我吗?为了查看输出位序列,我将其通过管道传输到命令 xxd -b
perl -e "print pack('f>*',3)"|xxd -b # outputs decimal 3 (base10) on the wanted format:
# 01000000 01000000 00000000 00000000
perl -e "print pack('f>*',3,7,8)"|xxd -b # outputs the requested dummy sequence correctly
# 01000000 01000000 00000000 00000000 01000000 11100000
# 00000000 00000000 01000001 00000000 00000000 00000000
echo 1|awk 'BEGIN{printf("%d,%d,%d",3,7,8);}'|xxd -b # creates same dummy sequence, in awk - here separated by ,
echo 1|awk 'BEGIN{printf("%d,%d,%d",3,7,8);}'|perl -e "print pack('f>*',<STDIN>)"|xxd -b
# outputs correct conversion of 3, but seems to ignore 7 and 8
# 01000000 01000000 00000000 00000000
我想分隔符必须以不同的方式处理?我也尝试了这种形式的 Perl 部分
perl -ne 'print pack "f>*",$_'
感谢任何帮助。
替换
<STDIN>
和
split(/,/, <STDIN>)
此外,最好将 Perl 程序用单引号引起来。这里没有区别,但这是一个好习惯。
perl -e'print pack "f>*", split /,/, <STDIN>'
干净地处理换行符(如果有的话):
perl -ne'chomp; print pack "f>*", split /,/'