尝试创建一个将对象转换为字节数组的函数(没有像
BinaryFormatter
create 这样的开销/元数据)。 我想我对以下代码很满意,除了它能够将 UInt32[] 数组和 Int32[] 数组转换为字节数组的能力。
private byte[] ObjectToByteArray(object obj)
{
string dataType = obj.GetType().Name;
switch (dataType)
{
case "Byte[]": // an array of bytes
return (byte[])obj;
case "String": // a null-terminated ASCII string
return Encoding.ASCII.GetBytes((string)obj);
case "UInt16": // an array of unsigned short (16-bit) integers
return BitConverter.GetBytes((ushort)obj);
case "UInt32": // an array of unsigned long (32-bit) integers
return BitConverter.GetBytes((uint)obj);
case "UInt32[]": // an array of pairs of unsigned long (32-bit) integers
//return BitConverter.GetBytes((ushort)obj);
return null;
case "Int32": // an array of signed long (32-bit) integers
return BitConverter.GetBytes((int)obj);
case "Int32[]": // an array of pairs of signed long (32-bit) integers
//return BitConverter.GetBytes((int)obj);
return null;
default:
throw new Exception($"The type of value ({dataType}) is not supported.");
}
}
我正在考虑做一些简单的 for every 4 字节循环,并不断将它们添加到字节数组中,但不确定这是否有效,甚至是最好的方法。 我什至不确定我当前的方法是我已经所做的最好的方法。 我在网上找到的所有内容似乎都让我困惑,在处理数据类型转换时让我头晕。
public static byte[] ToByteArray<T>(T[] obj) where T : unmanaged
{
unsafe
{
var result = new byte[sizeof(T) * obj.Length];
Buffer.BlockCopy(obj, 0, result, 0, result.Length);
return result;
}
}