首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将十六进制转换为二进制,并保持前导0的Perl

将十六进制转换为二进制,并保持前导0的Perl
EN

Stack Overflow用户
提问于 2018-06-05 23:19:03
回答 2查看 1.5K关注 0票数 0

我有一个十六进制数的数组,我想要转换成二进制数,问题是,在我的代码中,它删除了像0,1,2,3这样的东西的前导0。我需要这些前导0在我的代码的未来部分处理。有没有一种简单的方法可以将十六进制转换为二进制,并将前导0保留在perl中?

代码语言:javascript
复制
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));

EN

回答 2

Stack Overflow用户

发布于 2018-06-05 23:57:12

通过将数字放在%和格式字符之间,可以在sprintfprintf中指定输出的宽度,如下所示。

代码语言:javascript
复制
printf "%16b\n",hex("0132");

通过在数字前面加上0,让它在结果中填充0,如下所示

代码语言:javascript
复制
printf "%016b\n",hex("0132");

后者给出的结果是

0000000100110010

但这些都在这些函数的文档中涵盖了。

票数 4
EN

Stack Overflow用户

发布于 2018-06-07 10:38:34

此解决方案使用十六进制表示的长度来确定二进制表示的长度:

代码语言:javascript
复制
for my $num_hex (@nums_hex) {
   my $num = hex($num_hex);
   my $num_bin = sprintf('%0*b', length($num_hex)*4, $num);
   ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50703603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档