www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - getting the bytes of a long

reply jc <jc dummy.com> writes:
hi,

is there a way to stuff the 8 bytes of a long into a byte array other than to
use a union to achive that?

cheers
jc
Nov 29 2007
parent reply Bill Baxter <dnewsgroup billbaxter.com> writes:
jc wrote:
 hi,
 
 is there a way to stuff the 8 bytes of a long into a byte array other than to
use a union to achive that?
 
 cheers
 jc
Take the address, cast to byte, deref byte by byte: (cast(ubyte*)&the_long)[0]; (cast(ubyte*)&the_long)[1]; (cast(ubyte*)&the_long)[2]; ... --bb
Nov 29 2007
next sibling parent Regan Heath <regan netmail.co.nz> writes:
Bill Baxter wrote:
 jc wrote:
 hi,

 is there a way to stuff the 8 bytes of a long into a byte array other 
 than to use a union to achive that?

 cheers
 jc
Take the address, cast to byte, deref byte by byte: (cast(ubyte*)&the_long)[0]; (cast(ubyte*)&the_long)[1]; (cast(ubyte*)&the_long)[2]; ...
Which means that you can go: byte[] array = (cast(ubyte*)&the_long)[0..8]; if you want an actual array. Regan
Nov 30 2007
prev sibling parent reply Jason House <jason.james.house gmail.com> writes:
Bill Baxter wrote:

 jc wrote:
 hi,
 
 is there a way to stuff the 8 bytes of a long into a byte array other
 than to use a union to achive that?
 
 cheers
 jc
Take the address, cast to byte, deref byte by byte: (cast(ubyte*)&the_long)[0]; (cast(ubyte*)&the_long)[1]; (cast(ubyte*)&the_long)[2]; ... --bb
Does gdc run on any little endian machines? I'm not sure which way arrays grow on such machines, but I think this could would give the reverse byte order of a big endian machine.
Nov 30 2007
next sibling parent Bill Baxter <dnewsgroup billbaxter.com> writes:
Jason House wrote:
 Bill Baxter wrote:
 
 jc wrote:
 hi,

 is there a way to stuff the 8 bytes of a long into a byte array other
 than to use a union to achive that?

 cheers
 jc
Take the address, cast to byte, deref byte by byte: (cast(ubyte*)&the_long)[0]; (cast(ubyte*)&the_long)[1]; (cast(ubyte*)&the_long)[2]; ... --bb
Does gdc run on any little endian machines? I'm not sure which way arrays grow on such machines, but I think this could would give the reverse byte order of a big endian machine.
Yep. Order most definitely depends on endianness. Intel is little endian. If you're planning on sending those bytes over a network you'd better swap em if you've got version(LittleEndian). --bb
Nov 30 2007
prev sibling parent "Stewart Gordon" <smjg_1998 yahoo.com> writes:
"Jason House" <jason.james.house gmail.com> wrote in message 
news:fipgc3$5ni$1 digitalmars.com...
<snip>
 Does gdc run on any little endian machines?  I'm not sure which way arrays
 grow on such machines, but I think this could would give the reverse byte
 order of a big endian machine.
Array indexes always follow the sign convention of memory addresses. The basic difference between big-endian and little-endian machines is which way the bytes of a number go relative to this sign convention. So yes. As such, accessing an integer as an array of bytes is a common technique for converting between little-endian and big-endian byte orders. Stewart. -- My e-mail address is valid but not my primary mailbox. Please keep replies on the 'group where everybody may benefit.
Dec 06 2007