C# 将多种类型组合到一个字节数组中

C# 将多种类型组合到一个字节数组中,c#,.net,C#,.net,将不同类型的多个变量组合到一个字节数组中最有效的方法是什么 以以下数据为例: short a = 500; byte b = 10; byte[] c = new byte[4]; 如何将这三个变量组合成一个字节数组而不浪费大量时间和内存 可以这样想(伪代码): 我想到了不同的方法,包括不安全的代码,使用位转换器将它们转换为字节[],以及使用Linq的Concat 最后我需要一个数组,而不仅仅是一个IEnumerable,因为我需要通过udp发送此数据 有没有我没有想到的方法?将BinaryW

将不同类型的多个变量组合到一个字节数组中最有效的方法是什么

以以下数据为例:

short a = 500;
byte b = 10;
byte[] c = new byte[4];
如何将这三个变量组合成一个字节数组而不浪费大量时间和内存

可以这样想(伪代码):

我想到了不同的方法,包括不安全的代码,使用
位转换器将它们转换为
字节[]
,以及使用Linq的Concat

最后我需要一个数组,而不仅仅是一个
IEnumerable
,因为我需要通过udp发送此数据


有没有我没有想到的方法?

将BinaryWriter与MemoryStream结合使用

var buffer = new MemoryStream();   
var writer = new BinaryWriter(buffer);

writer.Write(a);
writer.Write(b);
writer.Write(c);

writer.Close();    
byte[] bytes = buffer.ToArray();
但请注意,没有填充或对齐。数组
c
将从奇数偏移开始


您还必须与客户核实Big-Endian/Little-Endian合同

将BinaryWriter与MemoryStream结合使用

var buffer = new MemoryStream();   
var writer = new BinaryWriter(buffer);

writer.Write(a);
writer.Write(b);
writer.Write(c);

writer.Close();    
byte[] bytes = buffer.ToArray();
但请注意,没有填充或对齐。数组
c
将从奇数偏移开始


您还必须与客户核实Big-Endian/Little-Endian合同

System.Collections.Specialized中的BitVector32.net帮助程序有时在这些情况下很有用。请使用Json.net、XmlSerializer、BinaryFormatter等序列化程序。。。。通过这种方式,您可以处理将来可能需要的更复杂的情况。@Eser Json.Net或XmlSerializer对我来说是没有选择的,因为它们会产生大量膨胀,本质上是文本,但BinaryFormatter看起来很有希望!System.Collections.Specialized中的BitVector32.net帮助程序有时在这些情况下很有用。请使用Json.net、XmlSerializer、BinaryFormatter等序列化程序。。。。通过这种方式,您可以处理将来可能需要的更复杂的情况。@Eser Json.Net或XmlSerializer对我来说是没有选择的,因为它们会产生大量膨胀,本质上是文本,但BinaryFormatter看起来很有希望!如果这是通过UDP发送的,我会考虑在开始时指定数组的长度和校验和,但是我可能过度了。pedantic@TheGeneral-这不取决于媒体,而是完全取决于发送方和接收方同意的格式。此处未指定。当数组大小固定且已知时,您不会添加长度。完全同意,只是将其放在那里,因为虽然udp在本地网络上相当可靠,但无法保证每个数据包到达和排序。不管怎样,我觉得这似乎是一个很好的解决办法。当我是发送和接收包的人时,填充和对齐是否会成为一个问题?通过udp发送的数据采用连接另一端已知的格式。如果这是一个问题,我如何修复它?当你用二进制阅读器阅读时,就没有问题了。但是当你控制两边时,JSON和XML是可供选择的。如果这是通过UDP发送的,我会考虑在开始时指定数组的长度和校验和,但是我可能过度了。pedantic@TheGeneral-这不取决于媒体,而是完全取决于发送方和接收方同意的格式。此处未指定。当数组大小固定且已知时,您不会添加长度。完全同意,只是将其放在那里,因为虽然udp在本地网络上相当可靠,但无法保证每个数据包到达和排序。不管怎样,我觉得这似乎是一个很好的解决办法。当我是发送和接收包的人时,填充和对齐是否会成为一个问题?通过udp发送的数据采用连接另一端已知的格式。如果这是一个问题,我如何修复它?当你用二进制阅读器阅读时,就没有问题了。但是当你控制两边时,JSON和XML是可以考虑的替代品。