如何将字节数组转换为任何类型
How to convert byte array to any type
好的伙计们,我看到有人问如何将字节数组转换为 int
、string
、Stream
等...答案都是各不相同,我个人还没有找到满意的答案。
下面是我们要将字节数组转换为的一些类型。
UnityEngine.Font
可以接收ttf
数据。
UnityEngine.Testure2D
which h can take in data from image files like .png
, .jpg
, etc...
我们如何将字节数组转换为 String
、UnityEngine.Testure2D,UnityEngine.Font
、Bitmap
等...
填充字节数组的数据必须来自一种文件类型,其数据可以由我们要将字节数组转换成的类型管理?
目前可以吗?
如有任何帮助,我们将不胜感激。
原始类型很简单,因为它们具有定义为字节数组的表示形式。其他对象不是,因为它们可能包含无法持久化的内容,如文件句柄、对其他对象的引用等。
您可以尝试使用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; }
}
好的伙计们,我看到有人问如何将字节数组转换为 int
、string
、Stream
等...答案都是各不相同,我个人还没有找到满意的答案。
下面是我们要将字节数组转换为的一些类型。
UnityEngine.Font
可以接收ttf
数据。
UnityEngine.Testure2D
which h can take in data from image files like .png
, .jpg
, etc...
我们如何将字节数组转换为 String
、UnityEngine.Testure2D,UnityEngine.Font
、Bitmap
等...
填充字节数组的数据必须来自一种文件类型,其数据可以由我们要将字节数组转换成的类型管理?
目前可以吗?
如有任何帮助,我们将不胜感激。
原始类型很简单,因为它们具有定义为字节数组的表示形式。其他对象不是,因为它们可能包含无法持久化的内容,如文件句柄、对其他对象的引用等。
您可以尝试使用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; }
}