Perl:创建一个二进制数并将其转换为十六进制数
我想从给定的用户输入创建一个二进制数 输入-数字数组 输出-二进制数 应创建一个二进制数,以便在作为输入的所有位置上都有一个二进制数 在给定的情况下,输入是1、3和7,因此我的二进制no应该是Perl:创建一个二进制数并将其转换为十六进制数,perl,binary,hex,Perl,Binary,Hex,我想从给定的用户输入创建一个二进制数 输入-数字数组 输出-二进制数 应创建一个二进制数,以便在作为输入的所有位置上都有一个二进制数 在给定的情况下,输入是1、3和7,因此我的二进制no应该是1000101,因此它在左侧的1、3和7处有1 @x = [ 1, 3, 7 ]; $z = 0; for( $i = 0; $i < 10; $i++ ){ foreach $elem ( @x ){ if( $elem == $i ){ join(
1000101
,因此它在左侧的1、3和7处有1
@x = [ 1, 3, 7 ];
$z = 0;
for( $i = 0; $i < 10; $i++ ){
foreach $elem ( @x ){
if( $elem == $i ){
join( "", $z, 1 );
}
else{
join( "", $z, 0 );
}
}
}
print "Value of z: $z";
@x=[1,3,7];
$z=0;
对于($i=0;$i<10;$i++){
foreach$elem(@x){
如果($elem==$i){
联接(“,$z,1);
}
否则{
联接(“,$z,0);
}
}
}
打印“z的值:$z”;
执行之后,我得到z的值为0
我需要把这个二进制转换成十六进制
是否有一些函数可以将二进制转换为十六进制?
[]
创建一个数组并返回对该数组的引用,因此您将单个标量指定给(名称不正确的)@x
您还误用了join
。始终使用严格使用;使用警告qw(全部)代码>!它会发现这个错误
固定的:
my @bits = ( 1, 3, 7 );
my $num = 0;
$num |= 1 << $_ for @bits;
# 76543210
printf("0b%b\n", $num); # 0b10001010
printf("0x%X\n", $num); # 0x8A
有几个问题:
@x=[1,3,7]代码>不是三个整数的数组。它是一个包含单个数组引用的数组。你想要的是圆括号,而不是方括号:@x=(1,3,7)代码>
join
返回的字符串未分配给$z
但即便如此,您的代码还是有缺陷:
- 它在
$z
的末尾追加一位,而不是开头
- 有一个尾随的零,在那里没有任何意义
看起来您正在尝试学习Perl。请始终使用严格的
和使用警告
。这些pragmas将帮助您更快地发现错误,因为Perl将抱怨更多的事情。非常感谢。您能告诉我如何将十六进制值存储在变量中吗$hex_value=%X($num)将起作用??我正在尝试学习Perl。你能解释一下这条线是怎么工作的吗$num |=1使用sprintf
而不是printf
来获取字符串,而不是打印它。1
my @bits_plus_1 = ( 1, 3, 7 );
my $num = 0;
$num |= 1 << ( $_ - 1 ) for @bits_plus_1;
# 6543210
printf("0b%b\n", $num); # 0b1000101
printf("0x%X\n", $num); # 0x45