0

perl の次の行について助けが必要です。

pack "NN", $b, $a;

それをC#に変換する方法がよくわかりません。a と b はどちらも int です

ありがとう

4

2 に答える 2

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 バイトの配列ができました。ビッグエンディアン形式の各整数。

于 2012-05-02T09:01:23.893 に答える
0

Monoは、優れたPack / Unpack APIであるDataConverter(Perlのpackおよびunpack関数に触発されたもの)を提供します。ソースコードはgitrepro(BSDライセンス)で入手できます

{
    byte [] data = DataConverter.Pack("^II", 12345678, 87654321);
    var result = DataConverter.Unpack("^II", data, 0);
    Console.Write ("{0}, {1}\n", result[0], result[1]);
}
于 2012-05-04T21:30:33.770 に答える