2009-02-26 22 views
1

私は次のような構造を持っています:バイト配列を文字列に変換するには?

構造体データ {int no;文字列名。 int id};

私はこの構造をbytearrayに変換しています。私はこれを構造形式に変換する必要があります。そのためには、最初のメンバーを整数と文字列に変換する必要があります。 bytearrayを構造に変換するには?

+1

どの言語/アーキテクチャですか? C++の答えとC#/。NETの答えは非常に異なって見えます! –

答えて

1

BitConverterクラスをチェックしてください。ここにはhow to convert byte array to intの例があります。

文字列変換の場合BitConverterは、ToChar()メソッドがあるにもかかわらず、実際には役に立ちません(彼のコメントでMarcが言及しているように)。代わりにASCIIEncoding,UTF8Encodingまたはその他のXxxEncodingクラスをSystem.Text名前空間に使用できます。

注:これは.Net固有です。

+0

BitConverterは文字列を手助けしません。エンディアンについては非常に注意が必要です(BitConverterはCPUのエンディアンを使用するため、ネットワークバイトオーダーなどの固定エンディアンは使用しません)。 –

+0

技術的には、BitConverterには文字列への変換を可能にするToChar()があります。しかし、最善のアプローチではない、私は同意する。 –

+0

Intsの場合はBitConverter、文字列の場合はEncoding.GetString()を使用します。 Encoding.GetString()は、ヌルターミネータの管理が必要な場合があります。 – Cheeso

1

まあ答えは本当にどのようにバイト配列に構造を変換しているかによって異なります。理論的には、逆の手順で同じ手順を実行する必要があります。例えば

あなたは構造がそのようなことをシリアライズ場合:

  • 最初の4バイト= NO
  • 第4バイト= ID
  • 残りバイト=名
における 文字のバイトストリーム

バイト配列を構造体に変換するには、その構造体型の変数を定義し、バイト配列から変換された値をメンバーに割り当てる必要があります。

1

多くのプラットフォームには、この目的のためのツールが含まれています。あなたはカスタム[デ]シリアル化コードを書くことができますが、それは非常に迅速に面倒なことができます。

たとえば、Googleのprotocol buffersは、ワイヤフォーマットを記述するための言語に依存しない機構です。プラスコミュニティ

によって lots more -

* = C++、GoogleのレポでJava、など...あなたが手ですべてを行う場合には、技術的に優れた(小さい)シリアライズを得ることができますが、それは多くの作業になります

関連する問題