2015-10-08 25 views
5

大丈夫私はバイト配列をint,stringStreamなどに変換する方法を尋ねる人からの質問を受けています。満足できる答えを見つけました。バイト配列を任意の型に変換する方法

ここでは、バイトの配列を変換するいくつかの型があります。

UnityEngine.Fontこれはttfのデータを取ります。

.png.jpg、などのような画像ファイルからデータを取り込むことができる時間UnityEngine.Testure2D ...

我々は StringUnityEngine.Testure2D,UnityEngine.FontBitmapなどにバイト配列に変換する方法を

...

バイト配列を生成するデータは、データをバイト配列を変換する型で管理できるファイル型からのものでなければなりません。

これは現在可能ですか?

ご協力いただければ幸いです。

+1

バイト配列はそれだけです。これは一連のバイトです。それらのバイトが文字列、int、 'UnityEngine.Font'などに属しているかどうかを知る方法はありません。それらは単なるバイトです。 'Type'パラメータを渡すことによってバイトを「直列化解除」しなければならないので、それはどのタイプのオブジェクトであるかを知るでしょう。 – Icemanind

+0

素晴らしいよ。簡単な例がありますか? –

+1

文字列でない限り、バイト配列を文字列に変換しないでください。本当にコードを台無しにすることができます。 Chrs/StringsはNetの2バイトオブジェクトであり、正しいエンコーディングを使用するように注意する必要があります。データの送受信は、通常、バイト配列を送信することによって行われます。オブジェクトはすべてシリアル化(バイトに変換することを意味します)し、デシリアライズする必要があります。 .pngやjpgのようなバイナリデータは、単なるバイト配列オブジェクトであり、単純にバイト配列に変換することができます。複雑なオブジェクトは、直列化される前にフィールドサイズのより良い定義を必要とするので、適切に直列化解除することができます。そういうわけで、あなたは様々な答えを見ます。 – jdweng

答えて

11

プリミティブ型は、バイト配列として定義された表現を持つため、簡単です。

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; 
    } 
} 
:彼らはファイルハンドルのような持続することができないものを含むことができるので、他の目的は、あなたが BinaryFormatterを使用してバイト配列にオブジェクトを永続化を試すことができます

など、他のオブジェクトへの参照ではありません

しかし、すべての型がシリアライズ可能ではありません。たとえば、データベースへの接続を「格納」する方法はありません。 に作成されている情報を保存することができます(接続文字列のように)接続を作成しますが、実際の接続オブジェクトを保存することはできません。

+0

この見た目は実用的です、私は今それをテストしています。 –

+0

私は本当にあなたの答えが好きです、私はここでそれをテストしています。 エラーが発生しています。ここに私のコードとがあります。私は何がどこでエラーが発生したのかを指摘する。 :) –

+0

私のコードのエラーはここにあります 'Byte [] ba = ToByteArray(myStream); // SerializationException:Type System.IO.UnmanagedMemoryStreamがSerializableとしてマークされていません。 –

関連する問題