public class Interop
{
/// <summary>
+ /// Convert array of unsigned integers to array of bytes.
+ /// </summary>
+ /// <param name="values">Array of unsigned integer values.</param>
+ /// <returns>Byte array</returns>
+ public static byte[] LEBytes(uint[] values)
+ {
+ var result = new byte[values.Length * sizeof(uint)];
+ Buffer.BlockCopy(values, 0, result, 0, result.Length);
+
+ return result;
+ }
+
+ /// <summary>
+ /// Convert byte array to array of unsigned integers.
+ /// </summary>
+ /// <param name="bytes">Byte array.</param>
+ /// <returns>Array of integers</returns>
+ public static uint[] ToUInt32Array(byte[] bytes)
+ {
+ var result = new uint[bytes.Length / sizeof(uint)];
+ Buffer.BlockCopy(bytes, 0, result, 0, bytes.Length);
+
+ return result;
+ }
+
+ /// <summary>
/// Reverse byte array
/// </summary>
/// <param name="source">Source array</param>
return bytes;
}
- public static string ToHex(IEnumerable<byte> bytes)
+ public static byte[] TrimArray(byte[] bytes)
+ {
+ int trimStart = bytes.Length - 1;
+ while (trimStart >= 0 && bytes[trimStart] == 0)
+ {
+ trimStart--;
+ }
+
+ byte[] result = new byte[trimStart + 1];
+ Array.Copy(bytes, 0, result, 0, trimStart + 1);
+
+ return result;
+ }
+
+ public static string ToHex(byte[] bytes)
{
var sb = new StringBuilder();
foreach (var b in bytes)
return sb.ToString();
}
- public static int GetTime()
+ public static uint GetTime()
{
- return (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
+ return (uint)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
}
}
}