在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^@ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |