private static void encode(
        byte[] data,
        int pointer,
        double timestamp
    ) {

        // UT1-Mikrosekunden konstruieren
        long ut1 = convert(timestamp);
        boolean before2036 = (ut1 + OFFSET_2036 < 0);
        long micros;

        if (before2036) {
            micros = ut1 + OFFSET_1900;
        } else {
            micros = ut1 + OFFSET_2036; // siehe RFC 4330, Abschnitt 3
        }

        // Festkomma vor Bit 32, deshalb Bits nach links schieben
        long integer = micros / MIO;
        long fraction = ((micros % MIO) << 32) / MIO;

        if (before2036) {
            integer |= 0x80000000L; // siehe RFC 4330, Abschnitt 3
        }

        long ntp = ((integer << 32) | fraction);

        // Binäre Darstellung erzeugen
        for (int i = 7; i >= 0; i--) {

            data[i + pointer] = (byte) (ntp & 0xFF);
            ntp >>>= 8;

        }

        // niedrigstes Byte nur als Zufallszahl (siehe RFC 4330, Abschnitt 3)
        data[7 + pointer] = (byte) (Math.random() * BIT08);

    }
private static void encode ( byte [ ] data , int pointer , double timestamp ) { long ut1 = convert ( timestamp ) ; boolean before2036 = ( ut1 + OFFSET_2036 < 0 ) ; long micros ; if ( before2036 ) { micros = ut1 + OFFSET_1900 ; } else { micros = ut1 + OFFSET_2036 ; } long integer = micros / MIO ; long fraction = ( ( micros % MIO ) << 32 ) / MIO ; if ( before2036 ) { integer |= 0x80000000L ; } long ntp = ( ( integer << 32 ) | fraction ) ; for ( int i = 7 ; i >= 0 ; i -- ) { data [ i + pointer ] = ( byte ) ( ntp & 0xFF ) ; ntp >>>= 8 ; } data [ 7 + pointer ] = ( byte ) ( Math . random ( ) * BIT08 ) ; }
NTP-Timestamp als byte-Array kodieren