{
WrappedList<byte> wBytes = new WrappedList<byte>(txBytes);
- nVersion = Interop.LEBytesToUInt32(wBytes.GetItems(4));
- nTime = Interop.LEBytesToUInt32(wBytes.GetItems(4));
+ nVersion = BitConverter.ToUInt32(wBytes.GetItems(4),0);
+ nTime = BitConverter.ToUInt32(wBytes.GetItems(4),0);
int nInputs = (int)VarInt.ReadVarInt(ref wBytes);
vin = new CTxIn[nInputs];
vin[nCurrentInput] = new CTxIn();
vin[nCurrentInput].txID = new Hash256(wBytes.GetItems(32));
- vin[nCurrentInput].n = Interop.LEBytesToUInt32(wBytes.GetItems(4));
+ vin[nCurrentInput].n = BitConverter.ToUInt32(wBytes.GetItems(4),0);
vin[nCurrentInput].scriptSig = wBytes.GetItems((int)VarInt.ReadVarInt(ref wBytes));
- vin[nCurrentInput].nSequence = Interop.LEBytesToUInt32(wBytes.GetItems(4));
+ vin[nCurrentInput].nSequence = BitConverter.ToUInt32(wBytes.GetItems(4),0);
}
int nOutputs = (int)VarInt.ReadVarInt(ref wBytes);
{
// Fill outputs array
vout[nCurrentOutput] = new CTxOut();
- vout[nCurrentOutput].nValue = Interop.LEBytesToUInt64(wBytes.GetItems(8));
+ vout[nCurrentOutput].nValue = BitConverter.ToUInt64(wBytes.GetItems(8),0);
vout[nCurrentOutput].scriptPubKey = wBytes.GetItems((int)VarInt.ReadVarInt(ref wBytes));
}
- nLockTime = Interop.LEBytesToUInt32(wBytes.GetItems(4));
+ nLockTime = BitConverter.ToUInt32(wBytes.GetItems(4), 0);
}
/// <summary>
// Fill the transactions array
tx[nTx] = new CTransaction();
- tx[nTx].nVersion = Interop.LEBytesToUInt32(wTxBytes.GetItems(4));
- tx[nTx].nTime = Interop.LEBytesToUInt32(wTxBytes.GetItems(4));
+ tx[nTx].nVersion = BitConverter.ToUInt32(wTxBytes.GetItems(4), 0);
+ tx[nTx].nTime = BitConverter.ToUInt32(wTxBytes.GetItems(4), 0);
// Inputs array
tx[nTx].vin = CTxIn.ReadTxInList(ref wTxBytes);
// outputs array
tx[nTx].vout = CTxOut.ReadTxOutList(ref wTxBytes);
- tx[nTx].nLockTime = Interop.LEBytesToUInt32(wTxBytes.GetItems(4));
+ tx[nTx].nLockTime = BitConverter.ToUInt32(wTxBytes.GetItems(4), 0);
}
return tx;
// 76a91408c8768d5d6bf7c1d9609da4e766c3f1752247b188ac -- scriptPubKey
// 00000000 -- lock time
- resultBytes.AddRange(Interop.LEBytes(nVersion));
- resultBytes.AddRange(Interop.LEBytes(nTime));
+ resultBytes.AddRange(BitConverter.GetBytes(nVersion));
+ resultBytes.AddRange(BitConverter.GetBytes(nTime));
resultBytes.AddRange(VarInt.EncodeVarInt(vin.LongLength));
foreach(CTxIn input in vin)
resultBytes.AddRange(output.ToBytes());
}
- resultBytes.AddRange(Interop.LEBytes(nLockTime));
+ resultBytes.AddRange(BitConverter.GetBytes(nLockTime));
return resultBytes;
}
public class Interop
{
- public static byte[] ReverseIfLE(byte[] source)
+ public static byte[] ReverseBytes(byte[] source)
{
- if (BitConverter.IsLittleEndian)
- {
- Array.Reverse(source);
- }
+ Array.Reverse(source);
return source;
}
public static byte[] LEBytes(uint[] values)
{
- if (BitConverter.IsLittleEndian)
- {
- byte[] result = new byte[values.Length * sizeof(uint)];
- Buffer.BlockCopy(values, 0, result, 0, result.Length);
-
- return result;
- }
- else
- {
- List<byte> result = new List<byte>();
-
- foreach (uint i in values)
- {
- result.AddRange(LEBytes(i));
- }
+ byte[] result = new byte[values.Length * sizeof(uint)];
+ Buffer.BlockCopy(values, 0, result, 0, result.Length);
- return result.ToArray();
- }
+ return result;
}
public static uint[] ToUInt32Array(byte[] bytes)
{
- if (BitConverter.IsLittleEndian)
- {
- uint[] result = new uint[bytes.Length / sizeof(uint)];
- Buffer.BlockCopy(bytes, 0, result, 0, bytes.Length);
-
- return result;
- }
- else
- {
- List<uint> result = new List<uint>();
-
- for (int i = 0; i < bytes.Length; i += 4)
- {
- result.Add(LEBytesToUInt32(bytes.Skip(i).Take(4).ToArray()));
- }
-
- return result.ToArray();
- }
- }
-
- public static byte[] LEBytes(ushort n)
- {
- byte[] resultBytes = BitConverter.GetBytes(n);
-
- if (!BitConverter.IsLittleEndian)
- {
- // Reverse array if we are on big-endian machine
- Array.Reverse(resultBytes);
- }
-
- return resultBytes;
- }
-
- public static byte[] LEBytes(uint n)
- {
- byte[] resultBytes = BitConverter.GetBytes(n);
-
- if (!BitConverter.IsLittleEndian)
- {
- // Reverse array if we are on big-endian machine
- Array.Reverse(resultBytes);
- }
+ uint[] result = new uint[bytes.Length / sizeof(uint)];
+ Buffer.BlockCopy(bytes, 0, result, 0, bytes.Length);
- return resultBytes;
- }
-
- public static byte[] LEBytes(ulong n)
- {
- byte[] resultBytes = BitConverter.GetBytes(n);
-
- if (!BitConverter.IsLittleEndian)
- {
- // Reverse array if we are on big-endian machine
- Array.Reverse(resultBytes);
- }
-
- return resultBytes;
+ return result;
}
public static byte[] BEBytes(ushort n)
{
byte[] resultBytes = BitConverter.GetBytes(n);
- if (BitConverter.IsLittleEndian)
- {
- // Reverse array if we are on little-endian machine
- Array.Reverse(resultBytes);
- }
+ Array.Reverse(resultBytes);
return resultBytes;
}
{
byte[] resultBytes = BitConverter.GetBytes(n);
- if (BitConverter.IsLittleEndian)
- {
- // Reverse array if we are on little-endian machine
- Array.Reverse(resultBytes);
- }
+ Array.Reverse(resultBytes);
return resultBytes;
}
{
byte[] resultBytes = BitConverter.GetBytes(n);
- if (BitConverter.IsLittleEndian)
- {
- // Reverse array if we are on little-endian machine
- Array.Reverse(resultBytes);
- }
+ Array.Reverse(resultBytes);
return resultBytes;
}
- public static ushort LEBytesToUInt16(byte[] bytes)
- {
- if (bytes.Length != sizeof(ushort))
- {
- throw new InteropException("Array size doesn't match the ushort data type.");
- }
-
- if (!BitConverter.IsLittleEndian)
- {
- // Reverse array if we are on big-endian machine
- Array.Reverse(bytes);
- }
-
- return BitConverter.ToUInt16(bytes, 0);
- }
-
- public static uint LEBytesToUInt32(byte[] bytes)
- {
- if (bytes.Length != sizeof(uint))
- {
- throw new InteropException("Array size doesn't match the uint data type.");
- }
-
- if (!BitConverter.IsLittleEndian)
- {
- // Reverse array if we are on big-endian machine
- Array.Reverse(bytes);
- }
-
- return BitConverter.ToUInt32(bytes, 0);
- }
-
- public static ulong LEBytesToUInt64(byte[] bytes)
- {
- if (bytes.Length != sizeof(ulong))
- {
- throw new InteropException("Array size doesn't match the ulong data type.");
- }
-
- if (!BitConverter.IsLittleEndian)
- {
- // Reverse array if we are on big-endian machine
- Array.Reverse(bytes);
- }
-
- return BitConverter.ToUInt64(bytes, 0);
- }
public static ushort BEBytesToUInt16(byte[] bytes)
{
throw new InteropException("Array size doesn't match the ushort data type.");
}
- if (BitConverter.IsLittleEndian)
- {
- // Reverse array if we are on little-endian machine
- Array.Reverse(bytes);
- }
+ Array.Reverse(bytes);
return BitConverter.ToUInt16(bytes, 0);
}
throw new InteropException("Array size doesn't match the uint data type.");
}
- if (BitConverter.IsLittleEndian)
- {
- // Reverse array if we are on little-endian machine
- Array.Reverse(bytes);
- }
+ Array.Reverse(bytes);
return BitConverter.ToUInt32(bytes, 0);
}
throw new InteropException("Array size doesn't match the ulong data type.");
}
- if (BitConverter.IsLittleEndian)
- {
- // Reverse array if we are on little-endian machine
- Array.Reverse(bytes);
- }
+ Array.Reverse(bytes);
return BitConverter.ToUInt64(bytes, 0);
}
}
return sb.ToString();
}
-
- public static void UInt16ToBE(ushort n, byte[] bs)
- {
- bs[0] = (byte)(n >> 8);
- bs[1] = (byte)(n);
- }
-
- public static ushort BEToUInt16(byte[] bs)
- {
- ushort n = (ushort)(bs[0] << 8);
- n |= (ushort)bs[1];
- return n;
- }
-
- public static ushort BEToUInt16(byte[] bs, int off)
- {
- ushort n = (ushort)(bs[off] << 8);
- n |= (ushort)bs[++off];
- return n;
- }
-
- public static void UInt16ToLE(ushort n, byte[] bs)
- {
- bs[0] = (byte)(n);
- bs[1] = (byte)(n >> 8);
- }
-
- public static void UInt16ToLE(ushort n, byte[] bs, int off)
- {
- bs[off] = (byte)(n);
- bs[++off] = (byte)(n >> 8);
- }
-
- public static ushort LEToUInt16(byte[] bs)
- {
- ushort n = (ushort)bs[0];
- n |= (ushort)(bs[1] << 8);
- return n;
- }
-
- public static ushort LEToUInt16(byte[] bs, int off)
- {
- ushort n = (ushort)bs[off];
- n |= (ushort)(bs[++off] << 8);
- return n;
- }
-
- public static void UInt32ToBE(uint n, byte[] bs)
- {
- bs[0] = (byte)(n >> 24);
- bs[1] = (byte)(n >> 16);
- bs[2] = (byte)(n >> 8);
- bs[3] = (byte)(n);
- }
-
- public static void UInt32ToBE(uint n, byte[] bs, int off)
- {
- bs[off] = (byte)(n >> 24);
- bs[++off] = (byte)(n >> 16);
- bs[++off] = (byte)(n >> 8);
- bs[++off] = (byte)(n);
- }
-
- public static uint BEToUInt32(byte[] bs)
- {
- uint n = (uint)bs[0] << 24;
- n |= (uint)bs[1] << 16;
- n |= (uint)bs[2] << 8;
- n |= (uint)bs[3];
- return n;
- }
-
- public static uint BEToUInt32(byte[] bs, int off)
- {
- uint n = (uint)bs[off] << 24;
- n |= (uint)bs[++off] << 16;
- n |= (uint)bs[++off] << 8;
- n |= (uint)bs[++off];
- return n;
- }
-
- public static ulong BEToUInt64(byte[] bs)
- {
- uint hi = BEToUInt32(bs);
- uint lo = BEToUInt32(bs, 4);
- return ((ulong)hi << 32) | (ulong)lo;
- }
-
- public static ulong BEToUInt64(byte[] bs, int off)
- {
- uint hi = BEToUInt32(bs, off);
- uint lo = BEToUInt32(bs, off + 4);
- return ((ulong)hi << 32) | (ulong)lo;
- }
-
- public static void UInt64ToBE(ulong n, byte[] bs)
- {
- UInt32ToBE((uint)(n >> 32), bs);
- UInt32ToBE((uint)(n), bs, 4);
- }
-
- public static void UInt64ToBE(ulong n, byte[] bs, int off)
- {
- UInt32ToBE((uint)(n >> 32), bs, off);
- UInt32ToBE((uint)(n), bs, off + 4);
- }
-
- public static void UInt32ToLE(uint n, byte[] bs)
- {
- bs[0] = (byte)(n);
- bs[1] = (byte)(n >> 8);
- bs[2] = (byte)(n >> 16);
- bs[3] = (byte)(n >> 24);
- }
-
- public static void UInt32ToLE(uint n, byte[] bs, int off)
- {
- bs[off] = (byte)(n);
- bs[++off] = (byte)(n >> 8);
- bs[++off] = (byte)(n >> 16);
- bs[++off] = (byte)(n >> 24);
- }
-
- public static uint LEToUInt32(byte[] bs)
- {
- uint n = (uint)bs[0];
- n |= (uint)bs[1] << 8;
- n |= (uint)bs[2] << 16;
- n |= (uint)bs[3] << 24;
- return n;
- }
-
- public static uint LEToUInt32(byte[] bs, int off)
- {
- uint n = (uint)bs[off];
- n |= (uint)bs[++off] << 8;
- n |= (uint)bs[++off] << 16;
- n |= (uint)bs[++off] << 24;
- return n;
- }
-
- public static ulong LEToUInt64(byte[] bs)
- {
- uint lo = LEToUInt32(bs);
- uint hi = LEToUInt32(bs, 4);
- return ((ulong)hi << 32) | (ulong)lo;
- }
-
- public static ulong LEToUInt64(byte[] bs, int off)
- {
- uint lo = LEToUInt32(bs, off);
- uint hi = LEToUInt32(bs, off + 4);
- return ((ulong)hi << 32) | (ulong)lo;
- }
-
- public static void UInt64ToLE(ulong n, byte[] bs)
- {
- UInt32ToLE((uint)(n), bs);
- UInt32ToLE((uint)(n >> 32), bs, 4);
- }
-
- public static void UInt64ToLE(ulong n, byte[] bs, int off)
- {
- UInt32ToLE((uint)(n), bs, off);
- UInt32ToLE((uint)(n >> 32), bs, off + 4);
- }
-
}
}
{
// ushort flag
prefix = 0xfd;
- valueBytes = Interop.LEBytes((ushort)n);
+ valueBytes = BitConverter.GetBytes((ushort)n);
}
else if (n <= uint.MaxValue)
{
// uint flag
prefix = 0xfe;
- valueBytes = Interop.LEBytes((uint)n);
+ valueBytes = BitConverter.GetBytes((uint)n);
}
else
{
// ulong flag
prefix = 0xff;
- valueBytes = Interop.LEBytes(n);
+ valueBytes = BitConverter.GetBytes(n);
}
resultBytes.Add(prefix);
byte[] bytesArray = bytes.ToArray();
- if (BitConverter.IsLittleEndian)
- {
- switch (prefix)
- {
- case 0xfd: // ushort flag
- return BitConverter.ToUInt16(bytesArray, 0);
- case 0xfe: // uint flag
- return BitConverter.ToUInt32(bytesArray, 0);
- case 0xff: // ulong flag
- return BitConverter.ToUInt64(bytesArray, 0);
- default:
- return prefix;
- }
- }
- else
+ switch (prefix)
{
- // Values are stored in little-endian order
- switch (prefix)
- {
- case 0xfd: // ushort flag
- Array.Resize(ref bytesArray, 2);
- Array.Reverse(bytesArray);
- return BitConverter.ToUInt16(bytesArray, 0);
- case 0xfe: // uint flag
- Array.Resize(ref bytesArray, 4);
- Array.Reverse(bytesArray);
- return BitConverter.ToUInt32(bytesArray, 0);
- case 0xff: // ulong flag
- Array.Resize(ref bytesArray, 8);
- Array.Reverse(bytesArray);
- return BitConverter.ToUInt64(bytesArray, 0);
- default:
- return prefix;
- }
+ case 0xfd: // ushort flag
+ return BitConverter.ToUInt16(bytesArray, 0);
+ case 0xfe: // uint flag
+ return BitConverter.ToUInt32(bytesArray, 0);
+ case 0xff: // ulong flag
+ return BitConverter.ToUInt64(bytesArray, 0);
+ default:
+ return prefix;
}
}
switch (prefix)
{
case 0xfd: // ushort
- return Interop.LEBytesToUInt16(wBytes.GetItems(2));
+ return BitConverter.ToUInt16(wBytes.GetItems(2), 0);
case 0xfe: // uint
- return Interop.LEBytesToUInt32(wBytes.GetItems(4));
+ return BitConverter.ToUInt32(wBytes.GetItems(4), 0);
case 0xff: // ulong
- return Interop.LEBytesToUInt64(wBytes.GetItems(8));
+ return BitConverter.ToUInt64(wBytes.GetItems(8), 0);
default:
return prefix;
}