2016-08-29 5 views
0

문자열이 text = 0a00...4c617374736e6e41입니다. 이 문자열은 실제로 16 진수 값을 문자로 포함합니다. 내가하려는 것은 e를 바꾸지 않고 다음의 변환을하는 것이다. 지. char a to 0x41;실제로 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)

나에게 내가 필요로하는 두 개의 문자를 제공합니다. 그러나 나는 그들이 원하는 형식으로 그들을 넣어하는 방법을 모른다.

+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