Re[42]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 03.09.21 15:26
Оценка:
Здравствуйте, vdimas, Вы писали:


V>Случаев сразу несколько.

V>Раньше был доступен stackalloc только под примитивные blit-типы.
V>Например, делаешь byte * b = stackallock byte[N], затем приводишь к указателю на структуру.

На самом деле есть public fixed byte
https://stackoverflow.com/questions/13001327/id-like-to-use-union-as-c-sharp-with-byte-array

А из него можно уже десериализовать сериализовать объекты
ну и юнионы тоже
[StructLayout(LayoutKind.Explicit, Size = 12)]
public unsafe struct UnionPacket
{
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
    [FieldOffset(0)]
    public fixed byte data[12];

    [FieldOffset(0)]
    public float Time;
    [FieldOffset(4)]
    public Int16 CoordX;
    [FieldOffset(6)]
    public Int16 CoordY;
    [FieldOffset(8)]
    public byte Red;
    [FieldOffset(9)]
    public byte Green;
    [FieldOffset(10)]
    public byte Blue;
    [FieldOffset(11)]
    public byte Alpha;
}


https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/unsafe-code

Кстати для интереса какая разница вызова localMultiply,Combine, UnsafeCombine и из натива
public static T Combine<T>(Func<T, T, T> combinator, T left, T right) => 
    combinator(left, right);

public static T UnsafeCombine<T>(delegate*<T, T, T> combinator, T left, T right) => 
    combinator(left, right);


static int localMultiply(int x, int y) => x * y;
int product = UnsafeCombine(&localMultiply, 3, 4);
и солнце б утром не вставало, когда бы не было меня
Отредактировано 03.09.2021 16:32 Serginio1 . Предыдущая версия . Еще …
Отредактировано 03.09.2021 15:33 Serginio1 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.