C#里面有没有类似memset函数功能的函数

本帖子已过去太久远了,不再提供回复功能。bcopy和memcpy、bzero和memset、bcmp和memcmp的差别 - 终结者 - ITeye技术网站
bcopy、bzero和bcmp是传统BSD的函数,属于POSIX标准;mem*是C90(以及C99)标准的C函数。区别在于,如果你打算把程序弄到一个符合C90/C99,但是不符合POSIX标准的平台时,后者比较有优势。
NetBSD的代码中有很多地方使用mem*(他们更偏爱mem*,以利于移植),即使内核也是如此,而FreeBSD的内核中则尽量避免使用(希望尽可能避免在内核中出现较多的C函数)。如果你提交代码的话需要注意这些约定。
在memset和bzero初始化数据间,我很多时候选择bzero, memset的一个缺点是第二个参数和第三个参数需要记忆,需要记住哪个是值和哪个是大小(如果不想查手册的话), 不可以弄错。
anders0913
浏览: 59942 次
来自: 北京
双方定时发握手消息 更可靠。。。。。。C#里面有没有类似memset功能的函数
在编写网络通信协议的时候经常要用到把结构数据复制到字节数组中,怎么做比较好啊?各位给点例子吧!
BitConvet.GetBytes();
如下代码返回16&?!!!!
Answer&a&=&new&Answer();
int&as1&=&Marshal.SizeOf(a);
public&struct&Answer
public&Int16&
public&Int16&
public&Int16&class1;
public&UInt32&
public&UInt16&
应该是12才对啊!为什么啊?!
前面还有一个结构中有6个Int16变量,SizeOf返回值为12。高手出来讲讲啊!
结构中的成员长度分别为2,2,2,4,2,存放UInt32类型时只能重新开辟新单元区,最后的UIint16虽然占用了2个字节,但多余的2个字节无法再分配了。
楼主如果把Answer.tt1放在最后定义,再看下长度就发现变成12了。
听起来有道理,可是我的结构反映的是协议头信息,不能随便改阿.
有什么别的办法吗?
用显示分配
[StructLayout(LayoutKind.Explicit)]
public&struct&Answer
[FieldOffset(0)]public&Int16&
[FieldOffset(2)]public&Int16&
[FieldOffset(4)]public&Int16&class1;
[FieldOffset(6)]public&UInt32&
[FieldOffset(10)]public&UInt16&
楼主可以看看关于内存字节对齐的概念
字节对齐?哪里有资料?
[StructLayout(LayoutKind.Sequential,&Pack=1)]
public&struct&Answer
public&Int16&
public&Int16&
public&Int16&class1;
public&UInt32&
public&UInt16&
回复
即使是一小步也想与你分享}

我要回帖

更多关于 memset函数的用法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信