okay guys I\'m seeing question from persons asking how to convert byte arrays to int
, string
, Stream
, etc... and the answers to which
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.
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;
};