たとえばテキストファイルに「a」などと書かれており、これが4ビットのビット列「1010」を表す場合、4ビットの2進数で表される値は、以下のようになるだろう。
0: 0000
1: 0001
2: 0010
3: 0011
4: 0100
5: 0101
6: 0110
7: 0111
8: 1000
9: 1001
a: 1010
b: 1011
c: 1100
d: 1101
e: 1110
f: 1111
これら 0~f までの文字列を Perl で処理するには以下のようにする(以下のロジックでは、4ビットの場合、ビットの番号は、左から 4、3、2、1 としているので、各人の仕様で調整してください)。
#!/usr/bin/perl
our $data = 'a';
our $BIT_LENGTH = 4; # ビットの長さ
$data = hex($data);
$data = pack("C", $data);
my @data = unpack("C", $data);
my $mask = 0x00000001; # マスク
for(my $i = 1; $i <= $BIT_LENGTH; $i++) {
# if(~$data[0] & $mask) { # (注: on: 0 / off: 1 のとき、~$data[0] とする)
if( $data[0] & $mask) {
# ここに(マスクにヒット)ビットが立っているときの処理を書く
print "bit $i: 1\n";
} else {
# ここにビットが立っていないときの処理を書く
print "bit $i: 0\n";
}
$mask = $mask << 1;
}
たとえばテキストファイルに「a」などと書かれており、これが4ビットのビット列「1010」を表す場合、4ビットの2進数で表される値は、以下のようになるだろう。
0: 0000
1: 0001
2: 0010
3: 0011
4: 0100
5: 0101
6: 0110
7: 0111
8: 1000
9: 1001
a: 1010
b: 1011
c: 1100
d: 1101
e: 1110
f: 1111
これら 0~f までの文字列を Perl で処理するには以下のようにする(以下のロジックでは、4ビットの場合、ビットの番号は、左から 4、3、2、1 としているので、各人の仕様で調整してください)。
#!/usr/bin/perl
our $data = 'a';
our $BIT_LENGTH = 4; # ビットの長さ
$data = hex($data);
$data = pack("C", $data);
my @data = unpack("C", $data);
my $mask = 0x00000001; # マスク
for(my $i = 1; $i <= $BIT_LENGTH; $i++) {
# if(~$data[0] & $mask) { # (注: on: 0 / off: 1 のとき、~$data[0] とする)
if( $data[0] & $mask) {
# ここに(マスクにヒット)ビットが立っているときの処理を書く
print "bit $i: 1\n";
} else {
# ここにビットが立っていないときの処理を書く
print "bit $i: 0\n";
}
$mask = $mask << 1;
}