2012-05-02 24 views
0

實施Perl的包功能,我需要一些幫助,下面一行用Perl:在.NET

pack "NN", $b, $a; 

我實在無法理解如何將其轉換成C#。其中一個& b都是詮釋

由於

+2

你明白[包語句做什麼(http://perldoc.perl.org/functions/pack.html)?必須嘗試找到匹配的C#方法?如果是的話,你卡在哪裏? – Heinzi

回答

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

現在你有八個數組字節;大端格式的每個整數。

0

Mono提供了一個很好的打包/解包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]); 
}