繁体   English   中英

在C#中将十进制数组转换为字节数组,反之亦然

[英]Converting decimal array to byte array and vice-versa in C#

我有以下函数将原始数组类型转换为字节数组,所以我可以将它转换为base64字符串,然后将其存储在某处,反之亦然,我现在卡住了因为我必须转换十进制类型,这不是一个基本类型。 我意识到十进制基本上是一个结构,所以我会将struct数组转换为字节数组,但我只看到使用不安全代码的答案,我想尽可能避免。 我使用Unity,我也只限于.NET 2.0

    private static string ConvertArrayToBase64<T>(ICollection<T> array) where T : struct
    {
        if (!typeof(T).IsPrimitive) 
            throw new InvalidOperationException("Only primitive types are supported.");

        int size = Marshal.SizeOf(typeof(T));
        var byteArray = new byte[array.Count * size];
        Buffer.BlockCopy(array.ToArray(), 0, byteArray, 0, byteArray.Length);
        return Convert.ToBase64String(byteArray);
    }

    private static T[] ConvertBase64ToArray<T>(string base64String) where T : struct
    {
        if (!typeof(T).IsPrimitive)
            throw new InvalidOperationException("Only primitive types are supported.");

        var byteArray = Convert.FromBase64String(base64String);
        var array = new T[byteArray.Length / Marshal.SizeOf(typeof(T))];
        Buffer.BlockCopy(byteArray, 0, array, 0, byteArray.Length);
        return array;
    }

您应该考虑使用System.IO.BinaryReaderSystem.IO.BinaryWriter 这些将使您能够从另一个流中读取和写入基元,例如System.IO.MemoryStream ,然后您可以使用Convert.ToBase64String()访问二进制数据并转换为base 64。

您可以将几乎任何对象序列化和反序列化为字节,XML,JSON等。

static byte[] serialize<T>(T t)
{
    var serializer = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
    using (var ms = new MemoryStream())
    {
        serializer.Serialize(ms, t);
        return ms.ToArray();            
    }
}

static object deserialize(byte[] bytes)
{
    var serializer = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
    using (var ms = new MemoryStream(bytes))
        return serializer.Deserialize(ms);
}

[Serializable] class arrays { public decimal[] decArray; public int[] intArray; }

样品使用

arrays a = new arrays();
a.decArray = new decimal[] { 1m, 2m };
a.intArray = new int[] { 3, 4 };

byte[] bytes = serialize(a);


arrays result = deserialize(bytes) as arrays;

Debug.Print($"{string.Join(", ", result.decArray)}\t{string.Join(", ", result.intArray)}");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM