2014-04-17 2 views
1

16 진수의 단어가있는 파일이 있습니다.파일에서 부호있는 바이트를 읽는 방법

기본적으로 파일을 배열 sbyte[]으로 읽고 싶습니다.

은 내가 어떻게 서명 바이트 배열에 읽어

byte[] bt = File.ReadAllBytes("fileName"); 

하지만를 사용하여 byte[]로 읽을 수 아마도 알아? 누군가 내 아이디어를 줄 수 있습니까?

당신은 단지 바이트 캐스트 할 수

답변

0

파일 얼마나 큰 ? 이 File.ReadAllBytes 괜찮 충분히 작은 경우, 당신은 아마 수행 할 수 있습니다

byte[] bt = File.ReadAllBytes("fileName"); 
sbyte[] sbt = new sbyte[bt.Length]; 
Buffer.BlockCopy(bt, 0, sbt, 0, bt.Length); 

솔직히 있지만 : 나는 그것은 byte[]로 유지하는 것 다른 곳에서 서명/부호에 대해 우려하고있다.

+0

답장을 보내 주셔서 감사합니다. 파일의 크기는 약 4000 kb입니다. 당신이 볼 수있는 작은 파일입니다. BlockCopy 메서드에 관해서도, float []에서 sbyte []로 데이터를 이동하는 데 사용할 수 있습니까 (예 : var byteArray = new byte [data.Length * 4]; Buffer.BlockCopy (data, 0, byteArray, 0, byteArray.Length); – user3535716

+0

@ user3535716 예. 멀티 바이트 데이터를 처리 할 때 엔디안을 알아야합니다. –

3

:

byte[] bt = File.ReadAllBytes("fileName"); 
sbyte[] sbytes = Array.ConvertAll(bt, b => (sbyte)b); 

아니면 sbyte들로 직접 파일을 읽을 선호하는 경우, 당신이 뭔가를 할 수 있습니다 :

static IEnumerable<sbyte> ReadSBytes(string path) 
{ 
    using (var stream = File.OpenRead(path)) 
    using (var reader = new BinaryReader(stream)) 
    { 
     while (true) 
     { 
      sbyte sb; 
      try 
      { 
       sb = reader.ReadSByte(); 
      } 
      catch(EndOfStreamException) 
      { 
       break; 
      } 
      yield return sb; 
     } 
    } 
} 

sbyte[] sbytes = ReadSBytes("fileName").ToArray(); 
+0

'return sb;는'yield return sb;'가 될 것입니까? –

+0

@AshBurlaczenko, 네, 저의 의도였습니다 ... 고쳐주었습니다, 고마워요! –

관련 문제