Sprache: C#
Diese Klasse kopiert die Bytes einer long-Variabele in ein byte-Array und gibt dieses zurück.
Muss mit /unsafe kompiliert werden.
namespace longByteConvert
{
static public class convert
{
/// <summary>
/// Convertiert einen long-Wert zu einem 8-Byte Array
/// </summary>
/// <param name="l">Der zu konvertierende long-Wert</param>
/// <returns>8-Byte Array des long-Wertes</returns>
public static unsafe byte[] Convert(long l)
{
void* tmp = &l;
byte* b = (byte*)tmp;
byte[] toRet = new byte[sizeof(long)];
for (int i = 0; i < sizeof(long); ++i)
{
toRet[i] = *b;
++b;
}
return toRet;
}
}
}
namespace longByteConvert
{
static public class convert
{
/// <summary>
/// Convertiert einen long-Wert zu einem 8-Byte Array
/// </summary>
/// <param name="l">Der zu konvertierende long-Wert</param>
/// <returns>8-Byte Array des long-Wertes</returns>
public static unsafe byte[] Convert(long l)
{
void* tmp = &l;
byte* b = (byte*)tmp;
byte[] toRet = new byte[sizeof(long)];
for (int i = 0; i < sizeof(long); ++i)
{
toRet[i] = *b;
++b;
}
return toRet;
}
}
}
Alte URL:
/snippet/long-in-ein-byte-array-kopieren/1412
Wer unsafe nicht mag, kann ja folgende Abwandlung verwenden.
public static byte[] Convert(long l)
{
long mask = 255;
byte[] res = new byte[sizeof(long)];
for (int i = 0; i < sizeof(long); ++i) { res[i] = (byte)((l & mask) >> (8 * i));
mask = mask << 8; } return res; }
1. Wenn schon unsafe Code dann kann man auch die Daten mit einer Dereferenzierung schreiben:
byte[] result = new byte[8];
fixed (byte* ptr = result)
*(long*)ptr = l;
2. Gibt es genau diese Implementierung schon im Framework selbst in der System.BitConverter Klasse (siehe GetBytes(long)).