【发布时间】:2014-01-04 07:03:34
【问题描述】:
我想问这个问题。我在谷歌上没有找到任何关于此的内容。
有没有办法根据序列化的字节数组重新创建一个类? 我知道它是一个序列化的对象。那是从一个 c++ 对象创建的。但我对对象本身一无所知。
我想我可以自己重新创建对象的结构,但这将是很多工作。 那么有没有办法自动分析字节序列化对象呢?
否则我将不得不手动遍历每个字节并尝试将其转换为 int、float、string 等信息。
非常感谢您的帮助,我知道我并不具体,但这里有一个例子:
00000000 10 10 00 00 03 E3 00 2B 00 0C 36 BE 4F 56 31 00 .......+..6.OV1.
00000010 00 86 00 00 00 00 00 00 00 00 00 00 03 6B 67 6B .............kgk
00000020 6B 6B 6B 6B 6B 6B AB 5D C4 28 D3 4B 77 29 D0 6E kkkkkk.].(.Kw).n
00000030 EB 54 6B 6B 6B 6B 6B 6B 6B 6B 64 43 FF 2E 9F A5 .TkkkkkkkkdC....
00000040 13 28 B2 BC F7 2E EB 1F 76 29 6C 5B 72 2A 6B 6B .(......v)l[r*kk
00000050 6B 6B 6B 6B 6B 6B 6C AC A5 2A 6B 6B A3 29 6B 94 kkkkkkl..*kk.)k.
00000060 6E 6B 6F 6B 6B 6B E2 3E A6 6B 6B 6B 6B 6B 6E 75 nkokkk.>.kkkkknu
00000070 FF 2E 65 F9 E7 28 6F 8F F7 2E 96 49 FF 2E AF 17 ..e..(o....I....
00000080 E7 28 88 B6 F7 2E .(....
提前致谢。
补充:它应该包含至少 6 个浮点值。位置 (x,y,z) 和视点坐标 (x,y,z,angle)。坐标将作为浮点值发送。此外,至少包含两个长度正好为 4 个字符的字符串。
Addition2:我不知道它是如何序列化的或用什么序列化的。我只能告诉你里面有什么。另外我正在寻找一种方法来自动将其转换为可读的数据结构。有什么方法可以尝试转换字节并检查输出值是否有意义,并自动执行此操作?
Addition3:我不知道c++类长什么样,我无权访问它。
【问题讨论】:
-
您想将 C++ 对象反序列化为 C# 对象吗?我们需要更多信息。第一:用什么来序列化 C++ 对象?
-
极不可能,相同的记忆可能意味着许多不同的东西,具体取决于它的上下文。例如,字节 0x0 可能表示布尔 false、字符 \0、空字符串等。如果您不知道上下文(或类定义),那么您将不知道正确的意图是什么。
-
您可以使用一些密码分析技术,例如尝试序列化具有不同值的不同对象并尝试找出其编码方式。或者您可以尝试使用一些常见的序列化方案。
-
至少应该包含位置信息。 3 浮点数表示位置 (x,y,z) 和基于 (x,y,z) 坐标的视点和视角的 4th。
-
你可以访问c++类吗?
标签: c# serialization