Информация об изменениях

Сообщение Re[42]: MS забило на дотнет. Питону - да, сишарпу - нет? от 03.09.2021 15:26

Изменено 03.09.2021 15:33 Serginio1

Re[42]: MS забило на дотнет. Питону - да, сишарпу - нет?
Здравствуйте, 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;
}
Re[42]: MS забило на дотнет. Питону - да, сишарпу - нет?
Здравствуйте, 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