2011-07-26 37 views

回答

1

Ooh..fun:

file.read(3).unpack("C*").inject { |r, n| r << 8 | n } 
+0

既简单又聪明。谢谢 ! – skiffr

0

您可以用unpack做到这一切,如果你不介意自己增加了一个额外的字节:

n = *("\x00" + file.read(3)).unpack('N') 

我不知道如果这样做更好,那就很主观。

+0

我看到,通过添加额外的字节你转换它一个32位整数。 – skiffr

+0

@skiffr:是的,你需要四个字节来直接解压它,而不是手动摆弄这些位。 –

2

使用BinData宝石

require 'bindata' 
n = BinData::Uint24be.read(file) 
相关问题