在Perl中解压缩功能要求

crsuarezf

我在Perl中有一个以这种方式从模板读取数据包的函数:

sub read_packet {
  my $contents = shift;
  my @decode = unpack('nnnN', $contents);

  my $version = $decode[0];
  my $identifier = $decode[1];
  my $type = $decode[2];
  my $size = $decode [3];

  @contents = ($version, $identifier, $type, $size);

  return (@contents);
}

需要对拆包功能中的模板进行更改。现在$ identifier必须支持32位,因此根据PerlMonks:包装/拆包教程(又名系统如何存储数据)(N)-> n,NA以“网络”(大端)顺序排列的16/32位值。

因此,对该函数进行了小的更改就对其进行了重写。现在,发送“数据包”的程序可能正在发送16/32位值。客户要求我同时支持16/32位。我如何知道数据包何时包含16位或32位标识符?

鲍罗丁

如果这四个领域是所有分组包含,那么你可以检查的长度$contents

  • 如果格式为,nnnN则长度为2 + 2 + 2 + 4 = 10字节

  • 如果格式为,nNnN则长度为2 + 4 + 2 + 4 = 12字节

但是,如果在这四个字段之后有数据,则必须尝试使用​​最常见的unpack模板并检查结果是否合理,如果失败,则使用备用模板

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python在C#中的解压缩功能

来自分类Dev

在php解压缩功能中搜索正确的格式

来自分类Dev

如何激活Windows 10的内置解压缩功能?

来自分类Dev

Common Lisp:在Paul Graham的著作中无法获得解压缩功能

来自分类Dev

C ++ LZMA SDK:LZMA2压缩文件的解压缩功能

来自分类Dev

F#(F Sharp)解压缩功能说明

来自分类Dev

SAS中的压缩功能

来自分类Dev

Perl在C中解压缩等效的“ S *”

来自分类Dev

方案压缩功能

来自分类Dev

Hive GUDF定制解压缩功能测试用例失败,错误为“ B无法转换为org.apache.hadoop.io.BytesWritable”

来自分类Dev

Perl解压缩子目录

来自分类Dev

解压缩LINQ中的压缩列表

来自分类Dev

压缩/解压缩内存中的数据

来自分类Dev

Python中的结构和解压缩

来自分类Dev

在python中解压缩大列表

来自分类Dev

在Python中解压缩列表

来自分类Dev

在MATLAB中解压缩单元数组?

来自分类Dev

在C#中解压缩档案

来自分类Dev

从解压缩的CSV中删除标题

来自分类Dev

在iOS中解压缩文件

来自分类Dev

解压缩Cordova中的分段归档

来自分类Dev

在C#中解压缩文本

来自分类Dev

Java中的多线程解压缩

来自分类Dev

在PHP中解压缩LZO流

来自分类Dev

在Ruby中打包/解压缩UUID

来自分类Dev

在列表理解中解压缩列表

来自分类Dev

在Go中解压缩tarball

来自分类Dev

在R中解压缩rar档案

来自分类Dev

在C ++中解压缩嵌套元组