Feedback

long in ein byte-Array kopieren

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

2 Kommentare

  1. 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; }

  2. 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)).