将十进制数字的序列转换为Big endian float

我有一个外部软件,使用存储为4字节浮游物的长序列的图像作为Big Endian,没有标题。 我可以使用awk创build一个小的示例图像,因此我可以控制可能的分隔符,或输出我的(浮动)数字序列,例如hex或十进制值。 但是,我还没有find一种方法来将其写入文件为4字节的浮点数。 因此,我尝试使用Perl的包来将我的十进制base10数字序列转换为4字节的浮点数Big Endian,它可以用于单个值,但是我的Perl经验太有限,无法使它适用于一系列值。

有人能更精通Perl帮助我吗? 要查看输出位序列,我将其input到命令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部分的forms

perl -ne 'print pack "f>*",$_'

任何帮助表示赞赏。

更换

 <STDIN> 

 split(/,/, <STDIN>) 

另外,如果用单引号将Perl程序包装起来,这也许是最好的选择。 这里没什么区别,但这是一个好习惯。

 perl -e'print pack "f>*", split /,/, <STDIN>' 

干净地处理新行(如果有的话):

 perl -ne'chomp; print pack "f>*", split /,/'