我需要一些关于 perl 中以下行的帮助:
pack "NN", $b, $a;
我真的不明白如何将其转换为 C#。其中 a & b 都是 int
谢谢
在 .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 个字节的数组;大端格式的每个整数。
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]);
}