2017-01-10 1 views
-2

작은 디코더를 쓰고 있습니다. 사용자가 프로그램에서 디코딩해야하는 문자열 (16 진수)을 입력하십시오.문자열에서 이진 읽기

내 문제는 int 값이 입력 된 값과 같지 않으므로 이진을 읽은 후 어떻게해야 좋을지 모르겠다. 나는 바이너리를 읽는 방법에 대해 놓친 점이 있는가?

string input = "0802"; 

byte[] arr = Encoding.Default.GetBytes(input); 

using (MemoryStream stream = new MemoryStream(arr)) 
{ 
    using (BinaryReader reader = new BinaryReader(stream)) 
    { 
     int a = reader.ReadInt32(); 
     Console.WriteLine(a); 
     //output: 842020912 
    } 
} 
+0

어떤 값이 입력 값과 다른가요? – NicoRiff

+3

'string'을 인코딩하고 있지만'int'를 읽으려고합니다. 그들은 동일하지 않을 것입니다. – juharr

+0

이 모든 것은 단지 한 줄의 코드 일 수 있습니다 :'int num = Convert.ToInt32 ("0802", 16);' – itsme86

답변

0

올바른 내용입니다. 문자열에서 4 바이트를 읽으면 int의 4 바이트로 해석됩니다.

"잘못된"숫자의 16 진수 값인 842020912을 확인하면 0x32303830이되고 모든 바이트를 ASCII로 읽으면 "2080"이됩니다.

리틀 엔디안 값을 읽는 순서가 반대입니다.

+0

함수'''ReadInt32()'''에서 나는 혼란 스러웠습니다. 명확 해 주셔서 고마워요. – SoulJam

+0

복잡한 변환없이 ASCII에 접근하는 간단한 방법이 있는지 궁금합니다. – SoulJam

0

어렵게하고 있습니다. 나는 바이트를 사용하지만 1in16 또는 int32를 매우 쉽게 수정할 수 있습니다. :

  string input = "0802"; 
      List<byte> bytes = new List<byte>(); 

      for (int i = 0; i < input.Length; i += 2) 
      { 
       bytes.Add(byte.Parse(input.Substring(i, 2), System.Globalization.NumberStyles.HexNumber)); 
      }