在 .NET 中实现 Perl 的 pack 函数

本文关键字:pack 函数 Perl 实现 NET | 更新日期: 2023-09-27 18:33:05

我需要一些关于perl中以下行的帮助:

pack "NN", $b, $a;

我真的不明白如何将其转换为 C#。 其中 a 和 b 都是 int

谢谢

在 .NET 中实现 Perl 的 pack 函数

在 .NET 中,结果不是字符串,而是字节数组。字符串由 16 位char值组成,因此不方便表示 8 位数据。

使用这样的方法来获取整数的"网络"表示形式:

public static byte[] ToNetwork(int value) {
  byte[] data = BitConverter.GetBytes(value);
  if (BitConverter.IsLittleEndian) {
    Array.Reverse(data);
  }
  return data;
}

将字节数组写入内存流:

int a = 1;
int b = 42;
byte[] result;
using (MemoryStream m = new MemoryStream()) {
  m.Write(ToNetwork(a), 0, 4);
  m.Write(ToNetwork(b), 0, 4);
  result = m.ToArray();
}

现在你有一个有八个字节的数组;每个整数都是大端格式的。

Mono提供了一个很好的Pack/Unpack API,DataConverter(灵感来自Perl包和解包函数)。源代码在 git repro (BSD 许可证)中可用

{
    byte [] data = DataConverter.Pack("^II", 12345678, 87654321);
    var result = DataConverter.Unpack("^II", data, 0);
    Console.Write ("{0}, {1}'n", result[0], result[1]);
}