【09】C#入门到精通——C# 结构体对齐 与 常用数据 对应关系
文章目录
- 1 C# 结构体对齐
- 1.1 默认对齐方式
- 1.2 节对齐方式设置
- 1.3 偏移量设置
- 2 C#与C/C++之间类型的对应关系
1 C# 结构体对齐
1.1 默认对齐方式
struct默认对齐方式,结构体长度必须是,最大成员长度的整数倍,所以下面结构体大小是 24
(实际占用大小为20)
using System;
using System.Runtime.InteropServices;namespace CdllTest
{class Program{static void Main(string[] args){TestStruct ts = new TestStruct();int len = Marshal.SizeOf(ts);Console.WriteLine(len);Console.ReadKey();}}public struct TestStruct{//默认对齐方式,struct长度必须是,最大成员长度的整数倍,所以下面结构体大小是 24 public byte id;//0~1public int width;//4~8public long height;//8~16public int num1;//16~20 }
}
1.2 节对齐方式设置
设置1字节对齐方式
[StructLayout(LayoutKind.Sequential,Pack = 1)]//指定1字节对齐public struct TestStruct{public byte id;//1public int width;//4public long height;//8public int num1;//4 }
1.3 偏移量设置
using System;
using System.Runtime.InteropServices;namespace CdllTest
{class Program{static void Main(string[] args){TestStruct ts = new TestStruct();int len = Marshal.SizeOf(ts);Console.WriteLine(len);Console.ReadKey();}}//指定偏移量[StructLayout(LayoutKind.Explicit)]public struct TestStruct{[FieldOffset(0)]//偏移字节数0public byte id;[FieldOffset(10)]//偏移字节数10public int width;[FieldOffset(15)]//偏移字节数15public long height;[FieldOffset(40)]//偏移字节数40public int num1; // struct长度必须是,最大成员长度的整数倍,所以结构体大小是 48 }
}