2016-08-29 1 views
0

私は文字列text = 0a00...4c617374736e6e41を持っています。この文字列には実際には16進数の文字が含まれています。私がしようとしているのは、eを変更することなく、次の変換になります。 g。 char a0x41;実際に16進値を表す文字をバイト配列に配置する方法

text = 0a...4c617374736e6e41; 
--> byte[] bytes = {0x0a, ..., 0x4c, 0x61, 0x73, 0x74, 0x73, 0x6e, 0x6e, 0x41}; 

これは私がこれまでに実装しようとしたものです:

... 
string text = "0a00...4c617374736e6e41"; 
var storage = StringToByteArray(text) 
... 
Console.ReadKey(); 

public static byte[] StringToByteArray(string text) 
{ 
    char[] buffer = new char[text.Length/2]; 
    byte[] bytes = new byte[text.length/2]; 
    using(StringReader sr = new StringReader(text)) 
    { 
     int c = 0; 
     while(c <= text.Length) 
     { 
      sr.Read(buffer, 0, 2); 
      Console.WriteLine(buffer); 
      //How do I store the blocks in the byte array in the needed format? 
      c +=2; 
     } 
    } 
} 

Console.WriteLine(buffer)は私が必要な2つの文字を提供します。しかし、私はどのようにそれらを望ましいフォーマットにするか考えていません。

+1

このバイト配列の例は、エンコードされたテキストのようです。デコードする場合は、送信者が選択したエンコードとエンコードを確認してください。送信者がその情報をあなたに伝えていない場合は、契約が壊れているか、通信/データの損失がありません。 –

+0

ちょっと@TomBlodget。それ以上の説明をしていただけますか?私はまだいくつかの問題/問題があります: bytestreamは特定の構造を表します。要素は: 'MessageId、MessageLanguage、MessageText'です。 'Console.WriteLine(Encoding.Unicode.GetChars(ByteArray))'は私に正しい 'MessageLanguage = de'と' MessageText = This is sample text'を与えます。コンソールは '?'と多くの空白を表示します。 ヒントはありますか? これを解決できれば、元の質問を調整して完了すると思います。 – kratsching

+0

最初に構造を作成するために使用されたステップを逆にするだけです。テキストを表すバイトについては、エンコーディングがUTF-16( 'Encoding.Unicode')であると推測するのではなく、コメントのようなコードを使用するだけで、それがわかっているエンコーディングを使用する必要があります。 –

答えて

0

この

  string text = "0a004c617374736e6e41"; 
      List<byte> output = new List<byte>(); 
      for (int i = 0; i < text.Length; i += 2) 
      { 
       output.Add(byte.Parse(text.Substring(i,2), System.Globalization.NumberStyles.HexNumber)); 
      } 
を試してみてください:ここで

は、しかし、私は私の問題にそれを転送することができませんでした、私はすでにトピックで見つかったいくつかのリンクあり

+0

これは実際に非常に簡単です。私は盲目でした。ありがとう@jdweng – kratsching

関連する問題