class CFPropertyList::Binary

def read_binary_real(fname,fd,length)

read a binary real value
def read_binary_real(fname,fd,length)
  raise CFFormatError.new("Real greater than 8 bytes: #{length}") if length > 3
  nbytes = 1 << length
  buff = fd.read(nbytes)
  CFReal.new(
    case length
    when 0 # 1 byte float? must be an error
      raise CFFormatError.new("got #{length+1} byte float, must be an error!")
    when 1 # 2 byte float? must be an error
      raise CFFormatError.new("got #{length+1} byte float, must be an error!")
    when 2 then
      buff.reverse.unpack("e")[0]
    when 3 then
      buff.reverse.unpack("E")[0]
    else
      fail "unexpected length: #{length}"
    end
  )
end