2016-08-16 3 views
2

ファイルの最初の2bytesを "unsigned int"として読みたいと思います。水晶で他のサイズのスライスを読むにはどうすればいいですか?

スレッド 「Crystal reading x bytes from file」 を確認したところ、次のコードで1バイト目を取得できました。

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 

しかし、このコードは、私が "1 UInt16型" として、この "2 UINT8" を読むことができますどのように "2 UINT8"

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

を返しますか?

答えて

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

関連する問題