c# - 对象到字节的转换

标签 c# .net conventions

当我尝试将对象转换为字节数组时,我得到了一个奇怪的数组。
这是代码:

        using (MemoryStream ms = new MemoryStream())
        {
            BinaryFormatter bf = new BinaryFormatter();
            bf.Serialize(ms, obj);
            Console.WriteLine(ByteArrayToString(ms.ToArray()));
        }
//int obj = 50;

//string ByteArrayToString(byte[] byteArr) the functionality of this method is pretty obvious


结果是这样的:

“ 00 01 00 00 00 FF FF FF FF 01 00 00 00 00 00 00 00 04 01 00 00 00 0C 53 79 73 74 65 6D 2E 49 6E 74 33 32 01 00 00 00 07 6D 5F 76 61 6C 75 65 00 08 32 00 00 00 0B“

有人可以向我解释为什么吗::)最佳结果应该仅为“ 32 00 00 00”。

最佳答案

由于序列化程序需要提供足够的信息以反序列化数据,因此它必须包含一些有关要序列化的对象的元数据。具体来说,

53 79 73 74 65 6D 2E 49 6E 74 33 32


部分代表System.Int32

如果改用BinaryWriter及其Write(Int32)方法,则将获得所需的效果:您的内存流将仅包含整数中的四个字节。如果不知道在流中写入了Int32,就无法反序列化。

关于c# - 对象到字节的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10485753/

相关文章:

C# - 关闭对话框后保存最后选择的文件名

c# - 从数据表更新查询的 where 子句值

javascript - 在哪里声明类常量?

c# - 串口数据接收速度快于处理速度

c# - 如何确定字符串是否具有正则表达式元字符? (C#)

c# - 如何将 C# 字符串转换为 Span<char>? (跨度<T>)

.net - ADO.Net 最佳实践 - 进行异步数据库调用时的单连接与多连接

JavaScript 是否在新行上大括号?

ruby-on-rails - 将 Rails 应用程序连接到现有数据库

c# - 通过动态属性将两个通用列表相交