4 Stimmen

Wie setzt man ein int auf byte* C#

Wie kann ich ein int in ein Byte* an einem bestimmten Index in einem Byte* konvertieren?

Idealerweise hätte ich gerne etwas wie:

unsafe{
    byte* igm=stackalloc byte[8];
    igm[4]=4283;
}

Es würde den ersten Teil des Bits auf igm[4] und den Rest auf igm[5] setzen.

Edit: Mir ist klar, dass es viele Möglichkeiten gibt, dies zu handhaben, ich suche nach dem effizientesten Weg, wenn möglich.

4voto

Erik van Brakel Punkte 22454

Versuchen Sie dies:

unsafe
{
    byte* igm = stackalloc byte[8];
    *(int*)(igm + 4) = 4283;
}

Wenn Sie einmal erkannt haben, dass Sie einfache Zeigerarithmetik verwenden können, um eine beliebige Stelle in Ihrem Byte-Array zu indizieren, wird alles viel einfacher.

1voto

driis Punkte 156110

Wie Sie vielleicht schon bemerkt haben, verhindert das Typsystem in C#, dass Sie das tun können. Allerdings können Sie Ihre Zeiger auf die entsprechenden Typen gecastet werden:

    unsafe
    {
        byte* igm = stackalloc byte[8];
        int* intPtr = (int*)igm;
        intPtr[1] = 4283;
    }

0voto

Eugene Cheverda Punkte 8460

Sie müssen Ihren Int zu sizeof(int) Anzahl von Bytes und setzen Sie diese Teile dann manuell auf Ihre Byte* an bestimmten Indizes.

Dies ist sicherer, da Sie wissen, WAS und WO Sie Ihre Daten ablegen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X