* [Caml-list] int -> byte array (and back)
@ 2003-11-19 20:31 Dustin Sallings
2003-11-19 22:40 ` Issac Trotts
2003-11-20 5:05 ` skaller
0 siblings, 2 replies; 3+ messages in thread
From: Dustin Sallings @ 2003-11-19 20:31 UTC (permalink / raw)
To: Caml Mailing List
I need to be able to get a byte array (specifically in little-endian
format) from an int. I'll need the reverse as well. Is there anything
that does that in the distribution, or do I need to calculate it
myself? Just trying to do things the right way.
--
Dustin Sallings
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Caml-list] int -> byte array (and back)
2003-11-19 20:31 [Caml-list] int -> byte array (and back) Dustin Sallings
@ 2003-11-19 22:40 ` Issac Trotts
2003-11-20 5:05 ` skaller
1 sibling, 0 replies; 3+ messages in thread
From: Issac Trotts @ 2003-11-19 22:40 UTC (permalink / raw)
To: caml-list
On Wed, Nov 19, 2003 at 12:31:23PM -0800, Dustin Sallings wrote:
>
> I need to be able to get a byte array (specifically in little-endian
> format) from an int. I'll need the reverse as well. Is there anything
> that does that in the distribution, or do I need to calculate it
> myself? Just trying to do things the right way.
Here's a way to do it:
# open Bigarray;;
# #load "bigarray.cma";;
# let i=Random.int 1024;;
val i : int = 735
# let a_of_i i =
let a=Array1.create int8_unsigned c_layout 4 in
a.{0} <- i land 0xff;
a.{1} <- (i lsr 8) land 0xff;
a.{2} <- (i lsr 16) land 0xff;
a.{3} <- (i lsr 24) land 0xff;
a;;
val a_of_i :
int ->
(int, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t =
<fun>
# let i_of_a a =
a.{0} lor (a.{1} lsl 8) lor (a.{2} lsl 16) lor (a.{3} lsl 24);;
val i_of_a : (int, 'a, 'b) Bigarray.Array1.t -> int = <fun>
# let a = a_of_i i;;
val a :
(int, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t =
<abstr>
# a.{0},a.{1},a.{2},a.{3};;
- : int * int * int * int = (223, 2, 0, 0)
# i_of_a a;;
- : int = 735
--
Issac Trotts
Programmer
Center for Neuroscience
University of California, Davis
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Caml-list] int -> byte array (and back)
2003-11-19 20:31 [Caml-list] int -> byte array (and back) Dustin Sallings
2003-11-19 22:40 ` Issac Trotts
@ 2003-11-20 5:05 ` skaller
1 sibling, 0 replies; 3+ messages in thread
From: skaller @ 2003-11-20 5:05 UTC (permalink / raw)
To: Dustin Sallings; +Cc: Caml Mailing List
On Thu, 2003-11-20 at 07:31, Dustin Sallings wrote:
> I need to be able to get a byte array (specifically in little-endian
> format) from an int. I'll need the reverse as well. Is there anything
> that does that in the distribution, or do I need to calculate it
> myself? Just trying to do things the right way.
There is nothing wrong in Ocaml with writing the
code yourself. In fact, for simple code like this
I recommend *against* using a library function even
if it exists.
The reason is: for a simple algorithm like this
the semantics are manifiest in the encoding,
and the reader does not have to go chasing up
on the documentation to discover the semantics.
If you are used to C/C++ you will find Ocaml
libraries strangely bare -- the language is
so expressive and efficient many features simply
don't need a named, documented, procedure to
get right .. for example
let make_recording_function () =
let h = Hashtbl.create 97 in
fun x y -> Hashtbl.add h x y
;;
let add = make_recording_function ()
;;
add 1 "one";;
add 2 "two";;
let data = [5,"five"; 6, "six"];;
iter2 add (split data);;
Just try to do that in C++ with classes to see
how good Ocaml is .. to make this polymorphic
I think you'd need to be a template meta-programming guru :-)
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2003-11-20 6:08 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-11-19 20:31 [Caml-list] int -> byte array (and back) Dustin Sallings
2003-11-19 22:40 ` Issac Trotts
2003-11-20 5:05 ` skaller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox