Monday, January 18, 2016

Convert int to byte array with big-endian in C++ or C

Convert the java code
https://docs.liferay.com/portal/6.2/javadocs/src-html/com/liferay/portal/kernel/io/BigEndianCodec.html

084            public static void putLong(byte[] bytes, int index, long l) {
085                    bytes[index] = (byte)(l >>> 56);
086                    bytes[index + 1] = (byte)(l >>> 48);
087                    bytes[index + 2] = (byte)(l >>> 40);
088                    bytes[index + 3] = (byte)(l >>> 32);
089                    bytes[index + 4] = (byte)(l >>> 24);
090                    bytes[index + 5] = (byte)(l >>> 16);
091                    bytes[index + 6] = (byte)(l >>> 8);
092                    bytes[index + 7] = (byte)l;
093            }

with c/c++

 VOID BigEndianCodePutLong(uint8_t * bytes, int index, uint64_t l)
 {
  // Write big-endian int value into buffer; 
  bytes[0] = (uint8_t)(l >> 56);
  bytes[1] = (uint8_t)(l >> 48);
  bytes[2] = (uint8_t)(l >> 40);
  bytes[3] = (uint8_t)(l >> 32);
  bytes[4] = (uint8_t)(l >> 24);
  bytes[5] = (uint8_t)(l >> 16);
  bytes[6] = (uint8_t)(l >> 8);
  bytes[7] = (uint8_t)l;  
  return;
 }