2016-08-16 4 views
2

"unsigned int"로 파일의 첫 번째 2 바이트를 읽으 려합니다.크리스털에서 다른 크기의 슬라이스를 어떻게 읽을 수 있습니까?

"Crystal reading x bytes from file" 나는 다음 코드로 1bytes를 얻을 수있었습니다.

File.open("./test/test_data") do |io| 
    buffer = Slice(UInt8).new(2) 
    bytes_read = io.read(buffer) 
    buffer = buffer[0, bytes_read] 
    pp buffer 
end 

그러나,이 코드는 "2 UINT8"는 "1 UINT16"로

$ crystal test2.cr 
buffer # => Slice[0, 6] 

가 어떻게이 "2 UINT8"를 읽을 수 있습니다 반환?

답변

4
File.open("test/test_data") do |io| 
    p UInt16.from_io(io, IO::ByteFormat::LittleEndian) 
end 
같은이 IO 번호의 read_bytes` (어쩌면 좀 더 관용적) '와 함께 할 수

Int.from_io

+1

:'io.read_bytes (UINT16, IO :: ByteFormat :: littleEndian의)' – asterite

+0

는 대한 감사 둘 다 빠른 답변. 두 코드가 모두 잘 작동하는지 확인할 수있었습니다. – elgoog