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

时间:2015-10-08 17:47:56

标签: c# arrays byte

好的家伙我看到有人询问如何将字节数组转换为intstringStream等等的问题......并且答案都是变化的,我个人没有找到任何令人满意的答案。

所以这里有一些我们想要将字节数组转换为。

的类型

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

UnityEngine.Testure2D h可以从.png.jpg等图像文件中获取数据......

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

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

这目前可能吗?

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:28)

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

您可以使用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;
    }
}

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

答案 1 :(得分:0)

c ++模板版本:

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

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