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

15 c# arrays byte

好球员,我从询问如何转换字节数组人看到的问题int,string,Stream,等...而这些问题的答案都不同,我曾亲自没有发现任何令人满意的答案.

所以这里有一些我们想要将字节数组转换为的类型.

UnityEngine.Font哪个可以接收ttf数据.

UnityEngine.Testure2D其中H可采取数据从如图片文件.png,.jpg等...

我们将如何转换为字节数组到String,UnityEngine.Testure2D,UnityEngine.Font,Bitmap,等...

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

这目前可能吗?

任何帮助,将不胜感激.

D S*_*ley 33

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

您可以尝试使用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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 现在 `BinaryFormatter` 已过时且不安全,请阅读:[CA2300:不要使用不安全的反序列化器 BinaryFormatter](https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca2300 ) &amp; [BinaryFormatter 安全指南](https://learn.microsoft.com/en-us/dotnet/standard/serialization/binaryformatter-security-guide)。 (4认同)
  • 如果它不能序列化,那么就不能序列化。无论如何,您期望如何处理带序列的_stream_。它只是一种移动数据的机制。它本身没有任何数据。 (2认同)