gpt4 book ai didi

c# - BinaryFormatter ,精确的 TYPE-SIZE 缓冲区

转载 作者:行者123 更新时间:2023-11-30 18:42:17 27 4
gpt4 key购买 nike

我有这个可序列化的类:

[Serializable]
public class myClass
{

public byte myByte { get; set; }
public short myShort { get; set; }
public int myInt { get; set; }
}

知道 BYTE 类型是 1 个字节,SHORT 类型是 2 个字节,INT 类型是 4 个字节,我在等待一个 7 字节的缓冲区,但是使用下面的代码我得到了一个 232 字节的缓冲区大小:

myClass mc = new myClass { myByte = 0xff, myShort = 0x009c, myInt = 0x00000045 };
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
bf.Serialize(ms, mc);
byte[] buffer = ms.ToArray();

我想通过 IP 发送“精确类型大小的缓冲区”,而不用像下面这样的代码麻烦:

byte[] exactBuffer = new byte[sizeof(byte) + sizeof(short) + sizeof(int)];
exactBuffer[0] = mc.myByte;
byte[] bmyShort = BitConverter.GetBytes(mc.myShort);
System.Buffer.BlockCopy(bmyShort, 0, exactBuffer, sizeof(byte), bmyShort.Length);
byte[] bmyInt = BitConverter.GetBytes(mc.myInt);
System.Buffer.BlockCopy(bmyInt, 0, exactBuffer, sizeof(byte)+sizeof(short), bmyInt.Length);

我需要这个类是一个类而不是一个结构。有什么办法吗?

最佳答案

您可以像建议的那样使用互操作和代码 int this post .但请注意,如果您未指定,该语言可以使用它希望使用的任何内存布局,因此您应该使用 StructLayout 属性。

此外,如果您的类包含对其他类的任何引用,这将不起作用。

一般来说,通过网络传输这样的数据往往不是解决方案,您应该使用 BinaryFormatter、XML 或 JSON 之类的东西。

关于c# - BinaryFormatter ,精确的 TYPE-SIZE 缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5942001/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com