caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [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;
as well as URLs for NNTP newsgroup(s).