在C++中
原型:extern void *memcpy(void *dest, void *src, unsigned int count);
功能:由src所指内存区域复制count个字节到dest所指内存区域。
由于涉及到内存,不知道c#有对应的方法来替代?高手指点!
C#中如何将一个数组中的值赋值给一个结构体???结构:
struct retu
{
public byte a;//数据头
public byte b;//下位机地址
public byte c;//命令
public char d;//状态
public float e;//力
public float f;//电压
public float g;//电流
public float h;//运动时间
public byte i;//数据长度
public byte Verify;//校验
public byte j;//数据尾
}
数组:
Byte[] mbyte = new Byte[11];
原型:extern void *memcpy(void *dest, void *src, unsigned int count);
功能:由src所指内存区域复制count个字节到dest所指内存区域。
由于涉及到内存,不知道c#有对应的方法来替代?高手指点!
C#中如何将一个数组中的值赋值给一个结构体???结构:
struct retu
{
public byte a;//数据头
public byte b;//下位机地址
public byte c;//命令
public char d;//状态
public float e;//力
public float f;//电压
public float g;//电流
public float h;//运动时间
public byte i;//数据长度
public byte Verify;//校验
public byte j;//数据尾
}
数组:
Byte[] mbyte = new Byte[11];
解决方案 »
- 用那个谷歌翻译网站 在IE8下出现找不到main_zh-CN.js这个文件
- 全局模拟按键的问题
- C#制作图片下载器问题
- 急!望高手求解-----远程主机关闭现有连接
- 一个简单的嵌入javascript到c#文件中的问题
- 如何在指定的Panel上绘图.
- 我现在做了个C#.NET 的一个网站、涉及到网上银行支付的问题,已经拿到了银行的接口,怎么实现这个接口?
- 读一个文件到一个string中,然后再写入另一个文件?
- 用c# 编写一个小型超市管理系统不使用数据库
- WM_NCCALCSIZE消息问题,窗体会不断变小,求救!!!
- sql2005数据库定时自动备份错误
- 刚学C#:想点一下按钮就关闭按钮所在的winform,按钮里代码怎么写?
先取结构指针&retu,然后 Marshal.Copy(mbyte, 0, &ret, 11);是这样用么?
和memcpy的方法差不多
都是用指针
Marshal.Copy(&ret, mbyte,0 , 11); &ret要转换成intptr的类型
static retu GetRetu( byte[] mbyte )
{
if (Marshal.SizeOf(typeof(retu)) == mbyte.Length) //<-- check their sizes do agree.
{
GCHandle gch = GCHandle.Alloc(mbyte, GCHandleType.Pinned);
retu r = (retu)Marshal.PtrToStructure(gch.AddrOfPinnedObject(), typeof(retu));
gch.Free(); return r;
}
else
{
throw new Exception( "no luck, you need to check the manual for the retu struct" );
}
}
我的数组接回来里面只有11个元素:serialPort1.Read(mbyte5, 0, 11);
用16进制表示就是AA F1 89 1 43 81 26 80 3F 5A C0黑体部分依次是状态,力,电压,电流,时间我的结构定义:
struct retu
{
public byte a;//数据头
public byte b;//下位机地址
public byte c;//命令
public char d;//状态
public float e;//力
public float f;//电压
public float g;//电流
public float h;//运动时间
public byte i;//数据长度
public byte Verify;//校验
public byte j;//数据尾
}所以算下来Marshal.SizeOf(typeof(retu))=28,mbyte.Length==11,这样不可能相等!