问题描述
本人定义了一个结构体,内嵌了二维数组和结构体数组,现在想转换成byte字节流,请问如何实现。在网上搜到的都是内嵌了一维数组的解决办法,但针对多维数组的解决方法没有,不知如何解决。结构体形式如下:/内嵌/结构体定义structstruc1{publicintnNum;}//复杂结构体定义structEXAM{publicint[][]nParam;publicstruc1[]struc;}现在定义一个EXAM对象,完成初始化和数据输入,怎么转换成byte[]对象呢??
解决方案
解决方案二:
问题是转成的byte[]要哪里用,需要的格式是什么,如果没有定义,那可以随便转换
解决方案三:
引用1楼github_22161131的回复:
问题是转成的byte[]要哪里用,需要的格式是什么,如果没有定义,那可以随便转换
+1C++是肯定没有直接的转换支持。你可以自己定义协议,关键是使用方也要能理解,比如转成{nParam:[[1,2,3],[4,5,6,9],[8]],struc:[1,3,5,7]}
解决方案四:
简单点可以用BinaryFormatter把对象序列化成二进制数据,复杂点可以自己定义一种协议来转换。
解决方案五:
引用楼主mantuoluo_ss的回复:
本人定义了一个结构体,内嵌了二维数组和结构体数组,现在想转换成byte字节流,请问如何实现。在网上搜到的都是内嵌了一维数组的解决办法,但针对多维数组的解决方法没有,不知如何解决。结构体形式如下:/内嵌/结构体定义structstruc1{publicintnNum;}//复杂结构体定义structEXAM{publicint[][]nParam;publicstruc1[]struc;}现在定义一个EXAM对象,完成初始化和数据输入,怎么转换成byte[]对象呢??
如果转换的目的是跨进程、跨平台可以通讯,或者保存(例如写入配置文件),比较符合最近4、5年的做法是使用json格式,比较符合10年前的做法是使用xml格式。你可以搜素一下,许多json类库的处理效率,不必二进制序列化/反序列化慢多少。而json的好处则很多。比如说跨平台,比如说内部属性都有哪些、排列先后次序、属性占内容的大小,等等,都可以灵活变化,而不会影响解析(甚至当你修改实体模型定义以后,原始的数据多出或者少了属性,反序列化起来也没有问题)。至于说“转换成byte[]对象”,你想干什么呢?凡是传输的,当然都是byte[]对象。比如说你把一个字符串写入文件,文件里当然是一个一个字节的。字符串跟byte[]之间的转换,这不应该成为什么问题(默认地,你可以总是采用utf8编码来转换)。
解决方案六:
二进制字节流是用来通过UDP协议传送至服务器的,此时还能直接转换么,服务器段解析是用的c++语言。
解决方案七:
引用5楼mantuoluo_ss的回复:
二进制字节流是用来通过UDP协议传送至服务器的,此时还能直接转换么,服务器段解析是用的c++语言。
说过了,所有东西都是通过byte流输入输出的。不要纠结什么“直接转换”的问题,你必须会自己调用几种序列化/反序列化类库,或者干脆自己写上几十行代码来解析数据流。c++语言在“极简单的struct和byte[]之间的转换”方法,把程序员弄傻了。
解决方案八:
本人疏忽,结构体是定义在c#语言和VS2008工程下。对于内嵌一维数组的结构体,我用marshal类提供的方法完成转换,对于内嵌二维数组的结构体还能用么
解决方案九:
引用6楼sp1234的回复:
Quote: 引用5楼mantuoluo_ss的回复:
二进制字节流是用来通过UDP协议传送至服务器的,此时还能直接转换么,服务器段解析是用的c++语言。说过了,所有东西都是通过byte流输入输出的。不要纠结什么“直接转换”的问题,你必须会自己调用几种序列化/反序列化类库,或者干脆自己写上几十行代码来解析数据流。c++语言在“极简单的struct和byte[]之间的转换”方法,把程序员弄傻了。
+1如果你只会使用union这种自动转换,还是赶紧恶补基础不要老纠结什么"直接"转换