求教关于内嵌多重数组和结构体的结构体与byte字节流转换的问题

问题描述

本人定义了一个结构体,内嵌了二维数组和结构体数组,现在想转换成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这种自动转换,还是赶紧恶补基础不要老纠结什么"直接"转换

时间: 2025-01-21 01:19:29

求教关于内嵌多重数组和结构体的结构体与byte字节流转换的问题的相关文章

spring-mongodb两层内嵌式数组怎么修改制定最内层的一个属性的值

问题描述 mongodb两层内嵌式数组怎么修改制定最内层的一个属性的值 { "_id" : ObjectId("549127427d3201f5086a711d"), "_class" : "cn.togym.entity.SitePrice", "siteId" : NumberLong(1122), "date" : "2014.3.10", "site

Gson获得json数据数组内嵌问题

问题描述 Gson获得json数据数组内嵌问题 {resultcode"": ""200""reason"": ""successed!""result"": {sk"": {temp"": ""24""wind_direction"": ""西风&

求教我用dsoframer.ocx将excel文档内嵌在winform中,如何将这个子界面关闭,方便下次重新打开

问题描述 c#求教我用dsoframer.ocx将excel文档内嵌在winform的子界面中,如何将这个子界面正确的关闭,方便下次重新打开,axFramerControl.Open(System.IO.Directory.GetCurrentDirectory()+"\excel1.XLS");我用的是这个打开语句,请问我要将这个子界面关闭该如何关闭,方便再次打开.谢谢! 解决方案 解决方案二:放到一个单独窗体里打开,关闭窗体也就关了

struct-一个类中内嵌两个结构体

问题描述 一个类中内嵌两个结构体 class AP_Vehicle { public: /* common parameters for fixed wing aircraft */ struct FixedWing { AP_Int8 throttle_min; AP_Int8 throttle_max; AP_Int8 throttle_slewrate; AP_Int8 throttle_cruise; AP_Int16 airspeed_min; AP_Int16 airspeed_ma

mongodb 内嵌数组大小

问题描述 mongodb 内嵌数组大小 需要一个很简单的功能,就是获取数组大小.例如有这样数据: { "name":"test", "arr":[{"num":0},{"num":1},{"num":2}] } 然后我再次插入数据时候,需要获取一下arr这个数组的长度.实现类似这样的功能: update({},{ $addToSet:{"arr": {"nu

oracle 中的集合(联合数组 内嵌表 可变数组)

1.定义一个集合,让它作为一个函数或过程的形式参数,这样就可以传递这个集合类型的参数.    看下面的例子:定义一个过程参数--内嵌表                                          create or replace package personnel   --定义一个包  as      type staff_list is table of emp.empno%type;  -- 定义了一个emp.empno 的内嵌表,表的类型为emp_empno.  

.NET Core的文件系统[4]:由EmbeddedFileProvider构建的内嵌(资源)文件系统

一个物理文件可以直接作为资源内嵌到编译生成的程序集中.借助于EmbeddedFileProvider,我们可以统一的编程方式来读取内嵌于某个程序集中的资源文件,不过在这之前我们必须知道如何将一个项目文件作为资源并嵌入到生成的程序集中. [ 本文已经同步到<ASP.NET Core框架揭秘>之中] 目录 一.将项目文件变成内嵌资源 二.读取资源文件 三.EmbededFileProvider 一.将项目文件变成内嵌资源 在默认情况下,我们添加到一个.NET项目中的静态文件并不会成为项目编译生成的

gcc对C语言的扩展:语句内嵌表达式(statement-embedded expression)

在gnu c 中,用括号将复合语句括起来也形成了表达式.他允许你在一个表达式内使用循环,跳转和局部变量. 一个复合语句是用大括号{}括起来的一组语句.在包含语句的表达式这种结构中,再用括号( )将大括号括起来,例如: ({ int y = foo (); int z; if (y > 0) z = y; else z = - y; z; }) 就是一个合法表达式,用于计算foo( )函数返回值的绝对值. 在上面的复合语句中,最后的一句必须是一个以分号结尾的表达式.这个表达式代表了整个结构的值.如

网页内嵌Windows Media Player播放器的多文件播放方法

网页内嵌Media Player播放器很简单,以下代码即可完成一个简单的播放器 : <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1- transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <