* Reading 16 bit floats from stream? [not found] <e919163f0610160833t6b04489ev46a2c4dd28860729@mail.gmail.com> @ 2006-10-16 15:44 ` Maurizio Colucci 2006-10-16 16:03 ` Maurizio Colucci 0 siblings, 1 reply; 10+ messages in thread From: Maurizio Colucci @ 2006-10-16 15:44 UTC (permalink / raw) To: caml-list [-- Attachment #1: Type: text/plain, Size: 212 bytes --] Hi, I need to read a sequence of single precision floats (16 bits) from a binary file. How can I do that? In case you are curious, I am parsing an MD2 file for a game. :-) Thanks a lot for any help, Maurizio [-- Attachment #2: Type: text/html, Size: 310 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Reading 16 bit floats from stream? 2006-10-16 15:44 ` Reading 16 bit floats from stream? Maurizio Colucci @ 2006-10-16 16:03 ` Maurizio Colucci 2006-10-16 16:27 ` [Caml-list] " Gerd Stolpmann 0 siblings, 1 reply; 10+ messages in thread From: Maurizio Colucci @ 2006-10-16 16:03 UTC (permalink / raw) To: caml-list [-- Attachment #1: Type: text/plain, Size: 256 bytes --] On 10/16/06, Maurizio Colucci <maurizio.colucci@gmail.com> wrote: > > Hi, > > I need to read a sequence of single precision floats (16 bits) from a > binary file. How can I do that? > Sorry, I mean 32 bits. Single precision floats are 32 bits. Maurizio [-- Attachment #2: Type: text/html, Size: 648 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Caml-list] Re: Reading 16 bit floats from stream? 2006-10-16 16:03 ` Maurizio Colucci @ 2006-10-16 16:27 ` Gerd Stolpmann 2006-10-16 17:06 ` Maurizio Colucci 0 siblings, 1 reply; 10+ messages in thread From: Gerd Stolpmann @ 2006-10-16 16:27 UTC (permalink / raw) To: Maurizio Colucci; +Cc: caml-list Am Montag, den 16.10.2006, 18:03 +0200 schrieb Maurizio Colucci: > > > On 10/16/06, Maurizio Colucci <maurizio.colucci@gmail.com> wrote: > Hi, > > I need to read a sequence of single precision floats (16 bits) > from a binary file. How can I do that? > > Sorry, I mean 32 bits. Single precision floats are 32 bits. Well, have heard of even 8 bit floats... 32 bit floats can be read. First read the 4 bytes and make an int32 of them. Then simply call Int32.float_of_bits. Gerd -- ------------------------------------------------------------ Gerd Stolpmann * Viktoriastr. 45 * 64293 Darmstadt * Germany gerd@gerd-stolpmann.de http://www.gerd-stolpmann.de Phone: +49-6151-153855 Fax: +49-6151-997714 ------------------------------------------------------------ ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Caml-list] Re: Reading 16 bit floats from stream? 2006-10-16 16:27 ` [Caml-list] " Gerd Stolpmann @ 2006-10-16 17:06 ` Maurizio Colucci 2006-10-16 17:23 ` Tom 2006-10-16 20:19 ` Martin Jambon 0 siblings, 2 replies; 10+ messages in thread From: Maurizio Colucci @ 2006-10-16 17:06 UTC (permalink / raw) Cc: caml-list [-- Attachment #1: Type: text/plain, Size: 758 bytes --] On 10/16/06, Gerd Stolpmann <info@gerd-stolpmann.de> wrote: > > Am Montag, den 16.10.2006, 18:03 +0200 schrieb Maurizio Colucci: > > > > > > On 10/16/06, Maurizio Colucci <maurizio.colucci@gmail.com> wrote: > > Hi, > > > > I need to read a sequence of single precision floats (16 bits) > > from a binary file. How can I do that? > > > > Sorry, I mean 32 bits. Single precision floats are 32 bits. > > Well, have heard of even 8 bit floats... > > 32 bit floats can be read. First read the 4 bytes I assume you mean four read_bytes calls... and make an int32 of > them. How do I create an int32 with four bytes? Then simply call Int32.float_of_bits. I get this last one, but I can't imagine the previous step. Thanks Maurizio [-- Attachment #2: Type: text/html, Size: 1606 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Caml-list] Re: Reading 16 bit floats from stream? 2006-10-16 17:06 ` Maurizio Colucci @ 2006-10-16 17:23 ` Tom 2006-10-16 20:19 ` Martin Jambon 1 sibling, 0 replies; 10+ messages in thread From: Tom @ 2006-10-16 17:23 UTC (permalink / raw) To: Maurizio Colucci; +Cc: caml-list [-- Attachment #1: Type: text/plain, Size: 51 bytes --] What about one read_int call? I guess it exists... [-- Attachment #2: Type: text/html, Size: 55 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Caml-list] Re: Reading 16 bit floats from stream? 2006-10-16 17:06 ` Maurizio Colucci 2006-10-16 17:23 ` Tom @ 2006-10-16 20:19 ` Martin Jambon 2006-10-16 20:35 ` Tom 1 sibling, 1 reply; 10+ messages in thread From: Martin Jambon @ 2006-10-16 20:19 UTC (permalink / raw) To: Maurizio Colucci; +Cc: caml-list On Mon, 16 Oct 2006, Maurizio Colucci wrote: > I assume you mean four read_bytes calls... > > and make an int32 of >> them. > > > How do I create an int32 with four bytes? I can't recall any predefined function. You can read the bytes one by one, and use Int32.shift_left and Int32.logor to create the int32 value. > Then simply call Int32.float_of_bits. > > > I get this last one, but I can't imagine the previous step. > > Thanks > > Maurizio > -- Martin Jambon, PhD http://martin.jambon.free.fr ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Caml-list] Re: Reading 16 bit floats from stream? 2006-10-16 20:19 ` Martin Jambon @ 2006-10-16 20:35 ` Tom 2006-10-16 23:25 ` Jacques Garrigue 0 siblings, 1 reply; 10+ messages in thread From: Tom @ 2006-10-16 20:35 UTC (permalink / raw) To: Martin Jambon; +Cc: Maurizio Colucci, caml-list [-- Attachment #1: Type: text/plain, Size: 151 bytes --] val Pervasives.input_binary_int : in_channel -> int val Pervasives.read_int : unit -> int val Marshal.from_channel : in_channel -> 'a For example... [-- Attachment #2: Type: text/html, Size: 542 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Caml-list] Re: Reading 16 bit floats from stream? 2006-10-16 20:35 ` Tom @ 2006-10-16 23:25 ` Jacques Garrigue 2006-10-17 14:02 ` Maurizio Colucci 0 siblings, 1 reply; 10+ messages in thread From: Jacques Garrigue @ 2006-10-16 23:25 UTC (permalink / raw) To: tom.primozic; +Cc: caml-list From: Tom <tom.primozic@gmail.com> > val Pervasives.input_binary_int : in_channel -> int This will indeed read a 32-bit integer, but on a 32-bit architecture ocaml int's are 31-bit, so you loose the highest bit. Note that on a 64-bit architecture this is sufficient for 32-bit integers! > val Pervasives.read_int : unit -> int This one reads a string... > val Marshal.from_channel : in_channel -> 'a And this one reads a marshalled value, which must include a special header indicating its ocaml representation. So if you really need to read a full 32-bit integer, none of these will work, and you must do the job by hand. Jacques Garrigue ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Caml-list] Re: Reading 16 bit floats from stream? 2006-10-16 23:25 ` Jacques Garrigue @ 2006-10-17 14:02 ` Maurizio Colucci 2006-10-17 14:32 ` Gerd Stolpmann 0 siblings, 1 reply; 10+ messages in thread From: Maurizio Colucci @ 2006-10-17 14:02 UTC (permalink / raw) Cc: tom.primozic, caml-list [-- Attachment #1: Type: text/plain, Size: 1059 bytes --] On 10/17/06, Jacques Garrigue <garrigue@math.nagoya-u.ac.jp> wrote: > > From: Tom <tom.primozic@gmail.com> > > > val Pervasives.input_binary_int : in_channel -> int > > This will indeed read a 32-bit integer, but on a 32-bit architecture > ocaml int's are 31-bit, so you loose the highest bit. > Note that on a 64-bit architecture this is sufficient for 32-bit > integers! > > > val Pervasives.read_int : unit -> int > > This one reads a string... > > > val Marshal.from_channel : in_channel -> 'a > > And this one reads a marshalled value, which must include a special > header indicating its ocaml representation. > > So if you really need to read a full 32-bit integer, none of these > will work, and you must do the job by hand. > > Jacques Garrigue Thanks to everybody. I found a library called extlib which provides a module called IO. I solved the problem with let l = Int32.float_of_bits (IO.read_real_i32 input) BTW, I am a bit surprised the standard library does not offer a way to do that. A simple task can become frustrating. Bye Maurizio [-- Attachment #2: Type: text/html, Size: 1479 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Caml-list] Re: Reading 16 bit floats from stream? 2006-10-17 14:02 ` Maurizio Colucci @ 2006-10-17 14:32 ` Gerd Stolpmann 0 siblings, 0 replies; 10+ messages in thread From: Gerd Stolpmann @ 2006-10-17 14:32 UTC (permalink / raw) To: Maurizio Colucci; +Cc: caml-list Am Dienstag, den 17.10.2006, 16:02 +0200 schrieb Maurizio Colucci: > BTW, I am a bit surprised the standard library does not offer a way to > do that. A simple task can become frustrating. I must say that I do not see the point. Although O'Caml is for high-level tasks it is unavoidable that you must sometimes look at the details and understand what's going on under the hood. This is more a matter of the programmer's general knowledge, and not about how good or bad a certain library is (which includes what _other_ people consider as important). Just to scare you. Before release 3.08 there was no Int32.float_of_bits in O'Caml, and one had to program such a function with bit shifting primitives. See how ugly this is (look for the now commented-out function fp8_of_fp4): https://gps.dynxs.de/svn/lib-ocamlnet2/trunk/code/src/rpc/rtypes.ml Gerd -- ------------------------------------------------------------ Gerd Stolpmann * Viktoriastr. 45 * 64293 Darmstadt * Germany gerd@gerd-stolpmann.de http://www.gerd-stolpmann.de Phone: +49-6151-153855 Fax: +49-6151-997714 ------------------------------------------------------------ ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2006-10-17 14:32 UTC | newest] Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <e919163f0610160833t6b04489ev46a2c4dd28860729@mail.gmail.com> 2006-10-16 15:44 ` Reading 16 bit floats from stream? Maurizio Colucci 2006-10-16 16:03 ` Maurizio Colucci 2006-10-16 16:27 ` [Caml-list] " Gerd Stolpmann 2006-10-16 17:06 ` Maurizio Colucci 2006-10-16 17:23 ` Tom 2006-10-16 20:19 ` Martin Jambon 2006-10-16 20:35 ` Tom 2006-10-16 23:25 ` Jacques Garrigue 2006-10-17 14:02 ` Maurizio Colucci 2006-10-17 14:32 ` Gerd Stolpmann
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox