C# 实现C/C++共同体简单应用
来源:互联网 发布:爱家cms房产网 编辑:程序博客网 时间:2024/06/05 16:14
网上看了写模拟C共同体的代码,总结一下应用到项目中。
一直以来C#下很少使用预定义功能。项目使用CRC16校验时与外部设备通讯存在一个高低字节次序问题。使用预定义功能可以很好的定义其先后次序。同时在传输字节时使用共同体也可提高程序执行效率(省去数据变换及移位数学运算)。
#define DEBUGE
//添加引用
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Explicit)]
private struct DATCRC
{
[FieldOffset(0)]
public ushort dat;
#if(DEBUGE)
[FieldOffset(0)]
[MarshalAs(UnmanagedType.U1)]
public byte ubyteFirst;
[FieldOffset(0)]
[MarshalAs(UnmanagedType.I1)]//有符号测试
public sbyte byteFirst;
[FieldOffset(1)]
[MarshalAs(UnmanagedType.U1)]
public byte ubyteSecond;
[FieldOffset(1)]
[MarshalAs(UnmanagedType.I1)]
public sbyte byteSecond;
#else
[FieldOffset(1)]
[MarshalAs(UnmanagedType.I1)]
public byte byteFirst;
[FieldOffset(0)]
[MarshalAs(UnmanagedType.I1)]
public byte byteSecond;
#endif
}
private DATCRC datCRC16;
1、[StructLayout(LayoutKind.Explicit)]MSDN中注释
StructLayoutAttribute类 允许你控制内存中类或结构的数据字段的物理布局
LayoutKind枚举 控制当导出到非托管代码时对象的布局
Auto:自动选择适当布局
Explicit:精确位置被显示控制,每个成员必须使用FieldOffsetAttribute指示该字段在类型中断位置。
Sequential:出现顺序依次布局,可以不连续。
2、[MarshalAs(UnmanagedType.I1)]MSDN中注释
MarshalAsAttribute类 指示如何在托管代码和非托管代码之间封送数据
UnmanagedType 枚举 指定如何将参数或字段封送到非托管代码
- C# 实现C/C++共同体简单应用
- c语言中的共同体
- c语言共同体
- C语言union共同体
- C语言之union共同体
- C——联合体(共同体)总结
- [C++]结构体、共同体和枚举类型
- C 语言结构体和共同体
- 【C语言】实现一个简单SHELL应用
- 【C】单链表的简单实现和应用!!!
- c语言简单应用
- C#ArrayList简单应用
- C#ArrayList简单应用
- C#ArrayList简单应用
- 简单C语言应用
- C程序简单应用
- C语言简单应用
- c语言基础知识_结构体访问,共同体,枚举类型
- 网络攻防技术与实践
- 2016届毕业生-毕业设计的相关事项
- iOS APP可执行文件的组成
- 建行支付网关实现DEMO
- P 、PE 、CE 简介
- C# 实现C/C++共同体简单应用
- 几种常见数据库连接池的使用比较
- python编程常用总结
- TinyOS视频第四集内容介绍
- 【Android】安卓学习笔记之在AndroidManifest 文件中注册Activity
- Linux用户管理
- 五子棋AI算法第四篇-启发式搜索函数
- sdk和ndk
- Ubuntu 文件备份问题