在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
转自:https://my.oschina.net/Tsybius2014/blog/352409#navbar-header 1.关于本文 在使用C#下的TCP(类TcpClient)、UDP(类UdpClient)协议传输信息时,都需要将信息转换为byte类型的数组进行发送。本文实现了两种object与byte数组的转换和一种文件与byte数组转换的方式。基础类型的数据,可以用BitConverter类中的函数进行转换。 2.object与byte[]的相互转换:使用IFormatter的Serialize和Deserialize进行序列化与反序列化 实现这个功能,需要先引用三个命名空间:System.IO、System.Runtime.Serialization、System.Runtime.Serialization.Formatters.Binary;
调用示例: 假设有一个添加了Serializable特性的结构:
那么调用下面的代码可以完成这个结构的转换
输出为: 需要注意的是,用这个方式进行结构与byte数组间的转换,结构或类必须有Serializable特性。否则会有异常(SerializationException):“程序集 "XXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" 中的类型 "XXX.XXX" 未标记为可序列化” 另外,这个方式生成的byte数组长度较大 3.使用Marshal类的StructureToPtr与PtrToStructure函数对object与byte数组进行转换 实现这个功能,需要先引用命名空间:System.Runtime.InteropServices
调用示例: 现有结构如下(就是比上面示例中的结构少了特性Serializable):
调用下面的代码可以完成转换:
运行示例: 可以看到,数组长度仅为12,比上面示例中转换的byte[]数组短了非常多,更加节省空间 4.使用FileStream将文件与byte数组相互转换 实现这个功能,需要先引用命名空间:System.IO
假设有文件test.txt,调用下面代码可以将test.txt写到byte数组中,并将这个byte数组的内容写入到文件output.txt里
运行结果: END
|
请发表评论