如何将 UInt32[] 和 Int32[] 数组转换为字节数组?

问题描述 投票:0回答:1

尝试创建一个将对象转换为字节数组的函数(没有像

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 字节循环,并不断将它们添加到字节数组中,但不确定这是否有效,甚至是最好的方法。 我什至不确定我当前的方法是我已经所做的最好的方法。 我在网上找到的所有内容似乎都让我困惑,在处理数据类型转换时让我头晕。

c# arrays type-conversion byte
1个回答
0
投票
    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;
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.