title: Equivalent in C# of Python's "struct.pack/unpack"?
body: <p>I am a seasoned Python developer and have come to love a lot of its conveniences. I have actually known C# for some time but recently have gotten into some more advanced coding.</p>
  
  <p>What I'm wondering is if there's a way to "parse" a byte array in C# into a set of (differently sized) items.</p>
  
  <p>Imagine we have this:</p>
  
  <p>Python:</p>
  
  <pre><code>import struct
  byteArray = "\xFF\xFF\x00\x00\x00\xFF\x01\x00\x00\x00"
  numbers = struct.unpack("&lt;LHL",byteArray)
  print numbers[0] # 65535
  print numbers[1] # 255
  print numbers[2] # 1
  
  newNumbers = [0, 255, 1023]
  byteArray = struct.pack("&lt;HHL",newNumbers)
  print byteArray # '\x00\x00\xFF\x00\xFF\x03\x00\x00'
  </code></pre>
  
  <p>I want to achieve the same effect in C#, without resorting to huge, messy amounts of code like this:</p>
  
  <p>C#:</p>
  
  <pre><code>byte[] byteArray = new byte[] { 255, 255, 0, 0, 0, 255, 1, 0, 0, 0 };
  byte[] temp;
  
  int[] values = new int[3];
  
  temp = new byte[4];
  Array.Copy(byteArray, 0, temp, 0, 4);
  values[0] = BitConverter.ToInt32(temp);
  
  temp = new byte[2];
  Array.Copy(byteArray, 4, temp, 0, 2);
  values[1] = BitConverter.ToInt16(temp);
  
  temp = new byte[4];
  Array.Copy(byteArray, 8, temp, 0, 4);
  values[2] = BitConverter.ToInt32(temp);
  
  // Now values contains an array of integer values.
  // It would be OK to assume a common maximum (e.g. Int64) and just cast up to that,
  // but we still have to consider the size of the source bytes.
  
  // Now the other way.
  int[] values = new int[] { 0, 255, 1023 };
  byteArray = new byte[8];
  
  temp = BitConverter.GetBytes(values[0]);
  Array.Copy(temp,2,byteArray,0,2);
  
  temp = BitConverter.GetBytes(values[1]);
  Array.Copy(temp,2,byteArray,2,2);
  
  temp = BitConverter.GetBytes(values[2]);
  Array.Copy(temp,0,byteArray,4,4);
  </code></pre>
  
  <p>Obviously the C# code I have is <em>very</em> specific and not in any way truly reusable.</p>
  
  <p>Advice?</p>