Hi,

I've been working with modifying a binary file to replace some meta-data 
included within.  I've had some discussions previously 
(http://www.ruby-forum.com/topic/85591) about this but couldn't get to a 
satisfactory conclusion.  Basically I need to encode an integer value 
into 3 bytes as part of a binary file - Bitstruct was suggested as one 
of the solutions, however I haven't been able to get it to work for 
values larger than 1024 :

require 'bit-struct'

class Audio < BitStruct
   signed       :aheader,       8,      :endian => :little
   unsigned     :alength,       3*8,    :endian => :little
   signed       :afooter,       8,      :endian => :little
end

audio = Audio.new
audio.aheader = 1
audio.alength = 3027
audio.afooter = 1
f = open("testfile","wb")
f.write(audio)
f.close
f = open("testfile","rb")
f.pos=0
puts f.read(1).unpack("c").first.to_s
puts f.read(3).unpack('H6').first.to_i(16)
puts f.read(1).unpack("c").first.to_s
f.close

In the application above, if the value of audio.alength is set to equal 
or below 1024 then the output for f.read(3).unpack('H6').first.to_i(16) 
matches, however if set above this then the value printed doesn't match.

Can anybody tell me why setting an audio.alength>=1024 breaks the output 
and provide a way to fix it ...

Thanks

-- 
Posted via http://www.ruby-forum.com/.