好的家伙我看到有人询问如何将字节数组转换为int
,string
,Stream
等等的问题......并且答案都是变化的,我个人没有找到任何令人满意的答案。
所以这里有一些我们想要将字节数组转换为。
的类型 UnityEngine.Font
可以接收ttf
个数据。
UnityEngine.Testure2D
h可以从.png
,.jpg
等图像文件中获取数据......
我们如何将字节数组转换为String
,UnityEngine.Testure2D,UnityEngine.Font
,Bitmap
等...
填充字节数组的数据必须来自一个文件类型,其数据可以通过我们要将字节数组转换为的类型来管理?
这目前可能吗?
任何帮助都将不胜感激。
答案 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;
};