91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

StructLayout在C#中的具體應用案例

c#
小樊
82
2024-07-20 23:54:59
欄目: 編程語言

  1. 使用StructLayout指定字段在內存中的布局順序
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential)]
struct Point
{
    public int x;
    public int y;
}

class Program
{
    static void Main()
    {
        Point p = new Point();
        p.x = 10;
        p.y = 20;

        byte[] buffer = new byte[Marshal.SizeOf(p)];
        IntPtr ptr = Marshal.AllocHGlobal(buffer.Length);
        Marshal.StructureToPtr(p, ptr, false);
        Marshal.Copy(ptr, buffer, 0, buffer.Length);

        foreach (byte b in buffer)
        {
            Console.Write($"{b} ");
        }

        Marshal.FreeHGlobal(ptr);
    }
}

在上面的示例中,通過使用StructLayout(LayoutKind.Sequential)指定Point結構體中字段的布局順序為按順序排列。然后將Point結構體實例轉換為字節數組,并輸出每個字節的值。

  1. 使用StructLayout指定字段的偏移量
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Explicit)]
struct Union
{
    [FieldOffset(0)]
    public byte b1;
    [FieldOffset(1)]
    public byte b2;
    [FieldOffset(0)]
    public short s1;
}

class Program
{
    static void Main()
    {
        Union u = new Union();
        u.s1 = 257;

        Console.WriteLine(u.b1); // 輸出1
        Console.WriteLine(u.b2); // 輸出1
    }
}

在上面的示例中,通過使用StructLayout(LayoutKind.Explicit)指定Union結構體中字段的布局方式為顯式布局。然后使用FieldOffset指定了字段的偏移量,使得b1和b2共享同一內存空間,從而可以通過不同的字段訪問同一內存位置的值。

0
娄底市| 平顶山市| 遂平县| 亳州市| 镇坪县| 比如县| 屏边| 余江县| 敖汉旗| 惠水县| 饶河县| 永登县| 霍城县| 台山市| 调兵山市| 伊通| 渝中区| 平泉县| 丹东市| 金溪县| 石嘴山市| 伊金霍洛旗| 柳江县| 龙陵县| 陕西省| 徐水县| 杭州市| 原平市| 吴江市| 密山市| 平山县| 织金县| 建水县| 淮滨县| 林西县| 曲靖市| 高安市| 同心县| 邵阳县| 孝义市| 绥德县|