C/C++ 与 C# 常用数据类型对比

C/C++ 与 C# 常用数据类型对比

在C# 调用C/C++ DLL 或C/C++ 调用C#回调函数时,经常涉及到一些常用的数据类型。有些数据类型,在两者中的数据长度不一致,下面将对一些常用的数据类型进行下对比。

非托管C语言类型C# 类型说明
charSystem.CharANSI 修饰
unsigned charSystem.Byte8位
shortSystem.Int1616位
unsigned shortSystem.UInt1616位
intSystem.Int3232位
unsigned intSystem.UInt3232位
longSystem.Int3232位
unsigned longSystem.UInt3232位
floatSystem.Single32位
doubleSystem.Double32位

char与字符串

关于char在实际开发中,如果表示字符,在C#则用System.Char类型;如果表示有符号整型,可用sbyte,无符号可用byte。
查看C#中关于sbyte与byte的定义,可以看到:sbyte的取值范围。

sbyte
同样查看byte:取值范围为0-255。因此,可根据实际开发情况选择合适数据类型。
byte

当用到字符串char* 时,可以用System.String 或System.StringBuilder。

布尔类型

另外,在一般在C/C++中,BOOL类型数据长度为32位,C#中bool类型数据长度为8位,可以使用Convert.ToBoolean()函数将C++ 32的BOOL转换为C#中的bool,也可直接定义System.UInt32类型,以解决互相调用时数据对齐问题。

结构体

c/c++ 中struct类型,在C#中为public struct{};举例,c中定义的结构体如下:

struct  FrameInfo
	{
		int id;
		double price;
        int stores[5];
	};

对应的C#中的结构体类型为:

public struct FrameInfo
        {
            public int id;
            public double price;
            数组传递时,需要设置两个参数,1,数组传递,2,长度
            [MarshalAs(UnmanagedType.ByValArray,SizeConst =5)]
            public int[] stores;
        };

指针

C#中可用System.IntPtr 来读取或操作C/C++中的指针类型,包括void类型。在一些比较复杂的函数中,比如返回值类型为比较复杂的结构体,有时需要将结构体转换为指针类型,即将结构体转为void类型,然后C#可通过IntPtr进行操作。

以上,记录下,欢迎评论区留言讨论。水平有限,如有错漏,恳请指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值