加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在Perl EOF处理中将位写入(和读取)位到二进制文件

发布时间:2020-12-16 06:06:36 所属栏目:大数据 来源:网络整理
导读:我有两个相关的问题(在Perl中): 将数据写入二进制文件,格式为:单位标志后跟8位 回读相同的格式 我试过这个(和其他变化,但对于我的生活,我无法弄清楚这一点): binmode(OUT);my $bit = pack("B1",'1');my $byte = pack("H2","02");print OUT $bit . $byte;
我有两个相关的问题(在Perl中):

>将数据写入二进制文件,格式为:单位标志后跟8位
>回读相同的格式

我试过这个(和其他变化,但对于我的生活,我无法弄清楚这一点):

binmode(OUT);
my $bit = pack("B1",'1');
my $byte = pack("H2","02");
print OUT $bit . $byte;

使用十六进制编辑器,我看到我得到16位:

1000000000000020

我想要的是9位:

100000020

另外:假设我写出了其中两种模式.这意味着我最终得到9 9 = 18位.我不知道如何处理最后一个字节(填充?)

这是压缩和解压缩文件,空间非常宝贵.我希望有一些简单的惯用方法可以做到这一点,我不知道.

解决方法

你可以使用Bit :: Vector来更轻松地管理你的位和转换,

use Bit::Vector;

my $bit = Bit::Vector->new_Bin( 1,'1' );

my $byte     = Bit::Vector->new_Bin( 8,'00000010' );
my $byte_9   = Bit::Vector->new_Bin( 9,'000000010' );
my $nineBits = Bit::Vector->new_Bin( 9,'100000000' );
my $carry    = Bit::Vector->new_Bin( 9,'000000000' );
my $ORed     = Bit::Vector->new_Bin( 9,'000000000' );
my $added    = Bit::Vector->new_Bin( 9,'000000000' );


$ORed->Union($nineBits,$byte_9);

print "bit: 0x". $bit->to_Hex(). "n";
print "byte 2: 0x". $byte->to_Hex(). "n";
print "nineBits: 0x". $nineBits->to_Hex(). "n";
print "nineBits: 0x". $nineBits->to_Bin(). "n";
print "ORed bit and byte 0x". $ORed->to_Dec(). "n";

open BINOUT,">out.bin"
    or die "nCan't open out.bin for writing: $!n";

binmode BINOUT;

print BINOUT pack ('B*',$ORed->to_Bin()) ."n"

这是输出

>perl bitstuff.pl
bit: 0x1
byte 2: 0x02
nineBits: 0x100
nineBits: 0x100000000
ORed bit and byte 0x-254
>cat out.bin 
201^@

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读