I’m porting a process over to Java. There’s already working versions in C# and C++.
I have a section in C# that I do Marshal.Copy(…) to convert 64 ulongs to 512 bytes and that line in C++ I use memmove(…) to do the same thing. What is available in Java to achieve the same result? I need the same binary information in the same order just as bytes instead of longs.
Edit:
The reason I’m porting to Java is to take advantage of the portability that Java naturally has. I would not like to use native code.
Another thing. Since Java doesn’t contain unsigned values, then I need to change what I’m requesting by just a little. I would like to attain the 8 unsigned byte values from each of the 64 longs (ulongs in C# and C++) so that I can use those values at indices in arrays later. This needs to happen thousands of times so the fastest way would be the best way.
ByteBufferworks well for this: just put in 64longvalues and get abyte[]out using thearray()method. TheByteOrderclass can handle endian issues effectively. For example, incorporating the approach suggested in a comment by wierob:Addendum: The resulting
byte[]components are signed, 8-bit values, but Java arrays require nonnegative integer index values. Casting abyteto anintwill result in sign extension, but masking the higher order bits will give the unsigned value ofbyte b:This answer elaborates on the applicable operator precedence rules. This related answer demonstrates a similar approach for
doublevalues.