如何将字节数组转换为任何类型

How to convert byte array to any type

好的伙计们,我看到有人问如何将字节数组转换为 intstringStream 等...答案都是各不相同,我个人还没有找到满意的答案。

下面是我们要将字节数组转换为的一些类型。

UnityEngine.Font可以接收ttf数据。

UnityEngine.Testure2D which h can take in data from image files like .png, .jpg, etc...

我们如何将字节数组转换为 StringUnityEngine.Testure2D,UnityEngine.FontBitmap 等...

填充字节数组的数据必须来自一种文件类型,其数据可以由我们要将字节数组转换成的类型管理?

目前可以吗?

如有任何帮助,我们将不胜感激。

原始类型很简单,因为它们具有定义为字节数组的表示形式。其他对象不是,因为它们可能包含无法持久化的内容,如文件句柄、对其他对象的引用等。

您可以尝试使用BinaryFormatter将对象持久化到字节数组:

public byte[] ToByteArray<T>(T obj)
{
    if(obj == null)
        return null;
    BinaryFormatter bf = new BinaryFormatter();
    using(MemoryStream ms = new MemoryStream())
    {
        bf.Serialize(ms, obj);
        return ms.ToArray();
    }
}

public T FromByteArray<T>(byte[] data)
{
    if(data == null)
         return default(T);
    BinaryFormatter bf = new BinaryFormatter();
    using(MemoryStream ms = new MemoryStream(data))
    {
        object obj = bf.Deserialize(ms);
        return (T)obj;
    }
}

但并非所有类型都是可序列化的。例如,无法 "store" 连接到数据库。您可以存储用于创建 连接的信息(如连接字符串),但不能存储实际的连接对象。

c++ 模板版本:

template<typename T>
void fromByteArray(T& t, byte *bytes)
{
  t = *(T*)bytes;
};

template<typename T>
byte * toByteArray(T& t) 
{
  return (byte*)&t;
};

您可以在 .Net 6.

中将字节数组反序列化为 class 对象
using System.Text.Json;

using MemoryStream ms = new MemoryStream(bytes);
Examlple ex = JsonSerializer.Deserialize<Example>(ms);
Console.WriteLine(ex.Value);

class Example
{
    string Value {get; set; }
}