How to convert byte array to any type

不问归期 提交于 2019-12-18 18:55:14

问题


okay guys I'm seeing question from persons asking how to convert byte arrays to int, string, Stream, etc... and the answers to which are all varying and I have personally not found any satisfactory answers.

So here are some types that we want to convert an array of bytes to.

UnityEngine.Font which can take in ttf data.

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

How would we convert a byte array to a String, UnityEngine.Testure2D,UnityEngine.Font, Bitmap, etc...

The data that populates the byte array must be from a file type whose data can by managed by the type we want to convert the byte array to?

Is this currently possible?

Any help would be appreciated.


回答1:


Primitive types are easy because they have a defined representation as a byte array. Other objects are not because they may contain things that cannot be persisted, like file handles, references to other objects, etc.

You can try persisting an object to a byte array using 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;
    }
}

But not all types are serializable. There's no way to "store" a connection to a database, for example. You can store the information that's used to create the connection (like the connection string) but you can't store the actual connection object.




回答2:


c++ template version :

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

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


来源:https://stackoverflow.com/questions/33022660/how-to-convert-byte-array-to-any-type

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!