在.NET中实现Perl的pack功能

时间:2012-05-02 08:46:38

标签: c# perl

我需要帮助perl中的以下行:

pack "NN", $b, $a;

我真的不明白如何将其转换为C#。在哪里& b都是int

由于

2 个答案:

答案 0 :(得分:4)

在.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();
}

现在你有一个包含8个字节的数组;大端格式的每个整数。

答案 1 :(得分:0)

Mono提供了一个很好的Pack / Unpack API,DataConverter(在Perl pack和unpack函数之后启发)。源代码在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]);
}