Feedback

C# - long in ein byte-Array kopieren

Veröffentlicht von am 20.07.2010
(1 Bewertungen)
Diese Klasse kopiert die Bytes einer long-Variabele in ein byte-Array und gibt dieses zurück.
Muss mit /unsafe kompiliert werden.
GFU-Schulungen  [Anzeige]

C# Komplett

Sie kennen sich in objektorientierter Programmierung aus. Sie schreiben C++ oder Java? Und nun stehen Sie vor der Aufgabe, in C# Anwendungen zu erstellen. Das C# Komplett-Seminar verschafft Ihnen umfassende Programmierkenntnisse in dieser Sprache. Nach der Schulung entwickeln Sie selbständig Anwendungen mit C#. Sie kennen die Datentypen und Klassenbibliotheken der objektorientierten Programmiersprache C#. Der Komplettkurs setzt bei den Grundlagen von C# ein. Sie arbeiten mit Variablen und konvertieren Typen. Multithreading, Delegates, Generics sind nach dem Seminar für Sie kein Geheimnis mehr.

VB.NET Einführung

Die Schulung zeigt Ihnen, wie Sie einfache, benutzerorientierte Programme, die auf Datenbanken zugreifen, in VB.NET eigenständig entwickeln. 

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;
        }
    }
}
Abgelegt unter long, byte, array, kopieren, konvertieren, long in byte.

2 Kommentare zum Snippet

Thomas Söhne schrieb am 21.07.2010:
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;
}
Spooky schrieb am 21.07.2010:
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)).
 

Logge dich ein, um hier zu kommentieren!