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 |= 0x80000000 L ; // 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 ) ; }
NTP - Timestamp als byte - Array kodieren