src/jlibrtp/StaticProcs.java
author nikita@nikita-rack
Thu, 09 Apr 2009 20:26:58 +0200
changeset 99 8de21ac527ce
parent 13 e684f11070d5
permissions -rw-r--r--
revert pour refaire un push propre
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     1
/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     2
 * Java RTP Library (jlibrtp)
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     3
 * Copyright (C) 2006 Arne Kepp
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     4
 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     5
 * This library is free software; you can redistribute it and/or
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     6
 * modify it under the terms of the GNU Lesser General Public
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     7
 * License as published by the Free Software Foundation; either
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     8
 * version 2.1 of the License, or (at your option) any later version.
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
     9
 *
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    10
 * This library is distributed in the hope that it will be useful,
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    13
 * Lesser General Public License for more details.
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    14
 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    15
 * You should have received a copy of the GNU Lesser General Public
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    16
 * License along with this library; if not, write to the Free Software
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    17
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    18
 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    19
package jlibrtp;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    20
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    21
/** 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    22
 * Generic functions for converting between unsigned integers and byte[]s.
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    23
 *
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    24
 * @author Arne Kepp
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    25
 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    26
public class StaticProcs {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    27
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    28
	/** 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    29
	 * Converts an integer into an array of bytes. 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    30
	 * Primarily used for 16 bit unsigned integers, ignore the first two octets.
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    31
	 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    32
	 * @param i a 16 bit unsigned integer in an int
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    33
	 * @return byte[2] representing the integer as unsigned, most significant bit first. 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    34
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    35
	public static byte[] uIntIntToByteWord(int i) {		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    36
		byte[] byteWord = new byte[2];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    37
		byteWord[0] = (byte) ((i >> 8) & 0x000000FF);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    38
		byteWord[1] = (byte) (i & 0x00FF);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    39
		return byteWord;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    40
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    41
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    42
	/** 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    43
	 * Converts an unsigned 32 bit integer, stored in a long, into an array of bytes.
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    44
	 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    45
	 * @param j a long
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    46
	 * @return byte[4] representing the unsigned integer, most significant bit first. 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    47
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    48
	public static byte[] uIntLongToByteWord(long j) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    49
		int i = (int) j;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    50
		byte[] byteWord = new byte[4];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    51
		byteWord[0] = (byte) ((i >>> 24) & 0x000000FF);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    52
		byteWord[1] = (byte) ((i >> 16) & 0x000000FF);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    53
		byteWord[2] = (byte) ((i >> 8) & 0x000000FF);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    54
		byteWord[3] = (byte) (i & 0x00FF);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    55
		return byteWord;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    56
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    57
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    58
	/** 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    59
	 * Combines two bytes (most significant bit first) into a 16 bit unsigned integer.
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    60
	 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    61
	 * @param index of most significant byte
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    62
	 * @return int with the 16 bit unsigned integer
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    63
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    64
	public static int bytesToUIntInt(byte[] bytes, int index) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    65
		int accum = 0;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    66
		int i = 1;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    67
		for (int shiftBy = 0; shiftBy < 16; shiftBy += 8 ) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    68
			accum |= ( (long)( bytes[index + i] & 0xff ) ) << shiftBy;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    69
			i--;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    70
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    71
		return accum;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    72
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    73
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    74
	/** 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    75
	 * Combines four bytes (most significant bit first) into a 32 bit unsigned integer.
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    76
	 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    77
	 * @param bytes
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    78
	 * @param index of most significant byte
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    79
	 * @return long with the 32 bit unsigned integer
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    80
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    81
	public static long bytesToUIntLong(byte[] bytes, int index) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    82
		long accum = 0;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    83
		int i = 3;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    84
		for (int shiftBy = 0; shiftBy < 32; shiftBy += 8 ) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    85
			accum |= ( (long)( bytes[index + i] & 0xff ) ) << shiftBy;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    86
			i--;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    87
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    88
		return accum;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    89
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    90
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    91
	/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    92
	 * Converts an arbitrary number of bytes, assumed to represent an unsigned integer,
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    93
	 * to a Java long
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    94
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    95
	/*public static long bytesToUintLong(byte[] bytes, int firstByte, int lastByte) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    96
		long accum = 0;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    97
		int i = lastByte - firstByte;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    98
		if(i > 7) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
    99
			System.out.println("!!!! StaticProcs.bytesToUintLong() Can't convert more than 63 bits!");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   100
			return -1;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   101
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   102
		int stop = (i+1)*8;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   103
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   104
		for (int shiftBy = 0; shiftBy < stop; shiftBy += 8 ) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   105
			accum |= ( (long)( bytes[firstByte + i] & 0xff ) ) << shiftBy;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   106
			i--;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   107
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   108
		return accum;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   109
	}*/
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   110
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   111
	/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   112
	 * Converts an arbitrary number of bytes, assumed to represent an unsigned integer,
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   113
	 * to a Java int
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   114
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   115
	/*	public static int bytesToUintInt(byte[] bytes, int firstByte, int lastByte) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   116
		int accum = 0;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   117
		int i = lastByte - firstByte;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   118
		if(i > 3) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   119
			System.out.println("!!!! StaticProcs.bytesToUintLong() Can't convert more than 31 bits!");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   120
			return -1;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   121
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   122
		int stop = (i+1)*8;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   123
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   124
		for (int shiftBy = 0; shiftBy < stop; shiftBy += 8 ) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   125
			accum |= ( (long)( bytes[firstByte + i] & 0xff ) ) << shiftBy;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   126
			i--;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   127
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   128
		return accum;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   129
	}*/
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   130
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   131
	/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   132
	 * Recreates a UNIX timestamp based on the NTP representation used
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   133
	 * in RTCP SR packets
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   134
	 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   135
	 * @param ntpTs1 from RTCP SR packet
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   136
	 * @param ntpTs2 from RTCP SR packet
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   137
	 * @return the UNIX timestamp
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   138
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   139
	public static long undoNtpMess(long ntpTs1, long ntpTs2) {		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   140
		long timeVal = (ntpTs1 - 2208988800L)*1000;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   141
			
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   142
		double tmp = (1000.0*(double)ntpTs2)/((double)4294967295L);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   143
		long ms = (long) tmp;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   144
		//System.out.println(" timeVal: " +Long.toString(timeVal)+ " ms " + Long.toString(ms));
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   145
		timeVal += ms;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   146
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   147
		return timeVal;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   148
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   149
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   150
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   151
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   152
	/** 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   153
	 * Get the bits of a byte
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   154
	 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   155
	 * @param aByte the byte you wish to convert
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   156
	 * @return a String of 1's and 0's
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   157
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   158
	public static String bitsOfByte(byte aByte) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   159
		int temp;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   160
		String out = "";
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   161
		for(int i=7; i>=0; i--) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   162
			temp = (aByte >>> i);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   163
			temp &= 0x0001;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   164
			out += (""+temp);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   165
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   166
		return out;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   167
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   168
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   169
	/** 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   170
	 * Get the hex representation of a byte
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   171
	 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   172
	 * @param aByte the byte you wish to convert
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   173
	 * @return a String of two chars 0-1,A-F
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   174
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   175
	public static String hexOfByte(byte aByte) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   176
		String out = "";
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   177
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   178
		for(int i=0; i<2; i++) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   179
			int temp = (int) aByte;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   180
			if(temp < 0) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   181
				temp +=256;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   182
			}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   183
			if(i == 0) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   184
				temp = temp/16;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   185
			} else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   186
				temp = temp%16;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   187
			}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   188
			
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   189
			if( temp > 9) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   190
				switch(temp) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   191
				case 10: out += "A"; break;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   192
				case 11: out += "B"; break;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   193
				case 12: out += "C"; break;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   194
				case 13: out += "D"; break;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   195
				case 14: out += "E"; break;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   196
				case 15: out += "F"; break;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   197
				}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   198
			} else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   199
				out += Integer.toString(temp);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   200
			}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   201
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   202
		return out;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   203
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   204
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   205
	/** 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   206
	 * Get the hex representation of a byte
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   207
	 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   208
	 * @param hex 4 bytes  the byte you wish to convert
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   209
	 * @return a String of two chars 0-1,A-F
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   210
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   211
	public static byte byteOfHex(byte[] hex) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   212
		byte retByte = 0;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   213
		Byte tmp;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   214
		int val = 0;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   215
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   216
		// First 4 bits
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   217
		tmp = hex[0];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   218
		val = tmp.intValue();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   219
		if(val > 64) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   220
			// Letter
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   221
			val -= 55;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   222
		} else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   223
			// Number
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   224
			val -= 48;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   225
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   226
		retByte = ((byte) (val << 4));
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   227
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   228
		// Last 4 bits
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   229
		tmp = hex[1];
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   230
		val = tmp.intValue();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   231
		if(val > 64) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   232
			// Letter
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   233
			val -= 55;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   234
		} else {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   235
			// Number
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   236
			val -= 48;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   237
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   238
		retByte |= ((byte) val);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   239
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   240
		return retByte;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   241
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   242
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   243
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   244
	/** 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   245
	 * Print the bits of a byte to standard out. For debugging.
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   246
	 * 
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   247
	 * @param aByte the byte you wish to print out.
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   248
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   249
	public static void printBits(byte aByte) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   250
		int temp;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   251
		for(int i=7; i>=0; i--) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   252
			temp = (aByte >>> i);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   253
			temp &= 0x0001;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   254
			System.out.print(""+temp);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   255
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   256
		System.out.println();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   257
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   258
	
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   259
	public static String bitsOfBytes(byte[] bytes) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   260
		String str = "";
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   261
		//Expensive, but who cares
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   262
		for(int i=0; i<bytes.length; i++ ) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   263
			str += bitsOfByte(bytes[i]) + " ";
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   264
			if((i + 1) % 4 == 0)
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   265
				str += "\n";
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   266
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   267
		
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   268
		return str;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   269
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents:
diff changeset
   270
}