C#中Python的解包函数

Posted

技术标签:

【中文标题】C#中Python的解包函数【英文标题】:Python's unpack function in C# 【发布时间】:2013-12-20 15:08:18 【问题描述】:

我正在寻找一种在 C# 中获取此过程结果的方法。准确地说,我试图根据给定的格式从二进制字符串中解压缩数据(该方法应该返回一个数组)。更多信息请参考http://docs.python.org/2/library/struct.html

struct.unpack('!hh', data[2:6])

有没有办法在 C# 中做到这一点?

【问题讨论】:

【参考方案1】:

我认为BinaryReader 是你想要的。

类似这样的东西是等价的(假设data 是一个字节数组):

using (var stream = new MemoryStream(data)) 
    using (var reader = new BinaryReader(stream)) 
        stream.Seek(2, SeekOrigin.Begin);

        var value1 = reader.ReadInt16();
        var value2 = reader.ReadInt16();
    

这应该跳过前 2 个字节,然后将接下来的 4 个字节加载到两个 short 变量中。

【讨论】:

BinaryReader 可能会咬你一口:它有固定的字节序。解包函数允许您指定不同的字节顺序,但 .NET 并不容易。如果你需要控制它,你必须使用流,可能是 Array.Reverse() 和 BitConverter。

以上是关于C#中Python的解包函数的主要内容,如果未能解决你的问题,请参考以下文章

Python 序列与映射的解包操作

“W”在 Perl 的解包函数中究竟做了啥?

Perl 中的解包功能要求

python中的解包

Python中的解包用法

python 3中的解包语法