private static byte[] get4bytes(long l) { // break down to bytes byte a[] = new byte[4]; a[0] = (byte)(l >> 24); a[1] = (byte)(l >> 16); a[2] = (byte)(l >> 8); a[3] = (byte)(l >> 0); // assemble back // ll != l. long ll = (unsigned(a[0]) << 24) | (unsigned(a[1]) << 16) | (unsigned(a[2]) <<8) | unsigned(a[3]); System.err.println("original " + l); System.err.println("new " + ll); // output: // original 33996344 // new 33963576 return a; } static byte unsigned(byte b) { if (b < 0) { b += 128; } return b; }