2016-08-16 1 views
2

Я хотел бы прочитать 1-й 2 байта файла как «unsigned int».Как я могу прочитать срез с другим размером в кристалле?

Я проверил нить «Crystal reading x bytes from file» , и я мог получить 1-й 2-й байт со следующим кодом.

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"

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

Как я могу читать эти "2 Uint8" как "1 UInt16"?

ответ

4
File.open("test/test_data") do |io| 
    p UInt16.from_io(io, IO::ByteFormat::LittleEndian) 
end 

Int.from_io

+1

То же самое можно сделать с помощью 'IO # read_bytes' (может быть немного более идиоматических):' io.read_bytes (UInt16, IO :: ByteFormat :: LittleEndian) ' – asterite

+0

Спасибо ваше для оба быстрый ответ. Я мог бы подтвердить, что оба кода работают хорошо. – elgoog