c#中如何实现memcpy????

shuguangleo 2008-06-16 03:20:44
在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];


...全文
2935 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yagebu1983 2008-06-17
  • 打赏
  • 举报
回复
shuguangleo 2008-06-17
  • 打赏
  • 举报
回复
怎么转?
是了几种方法都不行!
shuguangleo 2008-06-17
  • 打赏
  • 举报
回复
使用这个方法条件没法相等:
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,这样不可能相等!
ericzhangbo1982111 2008-06-16
  • 打赏
  • 举报
回复
Marshal.Copy(IntPtr ptr,byte[] dest,int start,int count);


Marshal.Copy(&ret, mbyte,0 , 11);

&ret要转换成intptr的类型
shuguangleo 2008-06-16
  • 打赏
  • 举报
回复
Marshal.Copy(mbyte, 0, &ret, 11);

说我有些参数无效,我再试试!
ericzhangbo1982111 2008-06-16
  • 打赏
  • 举报
回复

和memcpy的方法差不多
都是用指针
BIGBIRDINWOODS 2008-06-16
  • 打赏
  • 举报
回复
Marshal.Copy
shuguangleo 2008-06-16
  • 打赏
  • 举报
回复

先取结构指针&retu,然后 Marshal.Copy(mbyte, 0, &ret, 11);

是这样用么?
ericzhangbo1982111 2008-06-16
  • 打赏
  • 举报
回复
Marshal.Copy这个方法代替memcpy

111,111

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧