On Thursday, 15 February 2018 at 17:43:10 UTC, Jonathan M Davis
wrote:
On Thursday, February 15, 2018 16:51:05 Kyle via
Digitalmars-d-learn wrote:
Hi. Is there a convenient way to convert a ubyte[4] into a
signed int? I'm having trouble handling the static arrays
returned by std.bitmanip.nativeToLittleEndian. Is there some
magic sauce to make the static arrays into input ranges or
something? As a side note, I'm used to using D on Linux and
DMD's error messages on Windows are comparably terrible.
Thanks!
What are you trying to do exactly? nativeToLittleEndian is
going to convert an integral type such as an int to little
endian (presumably for something like serialization). It's not
going to convert to int. It converts _from_ int.
If you're trying to convert a ubyte[] to int, you'd use
littleEndianToNative or bigEndianToNative, depending on where
the data comes from. You pass it a static array of the size
which matches the target type (so ubyte[4] for int]). I don't
remember if slicing a dynamic array to passi it works or not
(if it does, you have to slice it at the call site), but a cast
to a static array would work if simply slicing it doesn't.
If you're trying to convert from int to ubyte[], then you'd use
nativeToLittleEndian or nativeToBigEndian, depending on which
endianness you need. They take an integral type and give you a
static array of ubyte whose size matches the integral type.
Alternatively, if you're trying to deal with a range of ubytes,
then read and peek can be used to get integral types from a
range of ubytes, and write and append can be used to put them
in a dynamic array or an output range of ubytes.
- Jonathan M Davis
I want to be able to pass an int to a function, then in the
function ensure that the int is little-endian (whether it starts
out that way or needs to be converted) before additional stuff is
done to the passed int. The end goal is compliance with a remote
console protocol that expects a little-endian 32-bit signed
integer as part of a packet.
What I'm trying to achieve is to ensure that an int is in
little-endiannes