我有一个十六进制数的数组,我想要转换成二进制数,问题是,在我的代码中,它删除了像0,1,2,3这样的东西的前导0。我需要这些前导0在我的代码的未来部分处理。有没有一种简单的方法可以将十六进制转换为二进制,并将前导0保留在perl中?
use strict;
use warnings;
my @binary;
my @hex = ('ABCD', '0132', '2211');
foreach my $h(@hex){
my $bin = sprintf( "%b", hex($h));
push @binary, $bin;
}
foreach (@binary){
print "$_\n";
}运行代码会得到1010101111001101 100110010 10001000010001
编辑:使用打包和解包找到类似的答案,已替换
使用unpack( 'B*', pack('H*' ($h))的sprint( "%b", hex($h));
发布于 2018-06-05 23:57:12
通过将数字放在%和格式字符之间,可以在sprintf或printf中指定输出的宽度,如下所示。
printf "%16b\n",hex("0132");通过在数字前面加上0,让它在结果中填充0,如下所示
printf "%016b\n",hex("0132");后者给出的结果是
0000000100110010
但这些都在这些函数的文档中涵盖了。
发布于 2018-06-07 10:38:34
此解决方案使用十六进制表示的长度来确定二进制表示的长度:
for my $num_hex (@nums_hex) {
my $num = hex($num_hex);
my $num_bin = sprintf('%0*b', length($num_hex)*4, $num);
...
}https://stackoverflow.com/questions/50703603
复制相似问题