/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* Copyright (C) 2005 - Matteo Merli - matteo.merli@gmail.com *
* *
***************************************************************************/
/*
* $Id: UnsignedNumber.java 316 2005-12-04 14:48:53Z merlimat $
*
* $URL: http://svn.berlios.de/svnroot/repos/rtspproxy/tags/3.0-ALPHA2/src/main/java/rtspproxy/lib/number/UnsignedNumber.java $
*
*/
package video.lib;
/**
* @author Matteo Merli
*/
public abstract class UnsignedNumber extends Number {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* Get a byte array representation of the number. The order will be MSB first
* (Big Endian).
*
* @return the serialized number
*/
public abstract byte[] getBytes();
/**
* Perform a bit right shift of the value.
*
* @param nBits
* the number of positions to shift
*/
public abstract void shiftRight(int nBits);
/**
* Perform a bit left shift of the value.
*
* @param nBits
* the number of positions to shift
*/
public abstract void shiftLeft(int nBits);
public abstract String toString();
public abstract int compareTo(UnsignedNumber other);
public abstract boolean equals(Object other);
public abstract int hashCode();
public String toHexString() {
return toHexString(false);
}
public String toHexString(boolean pad) {
StringBuilder sb = new StringBuilder();
boolean started = false;
for (byte b : getBytes())
if (!started && b == 0) {
if (pad)
sb.append("00");
} else {
sb.append(hexLetters[(byte) ((b >> 4) & 0x0F)]).append(hexLetters[b & 0x0F]);
started = true;
}
if (sb.length() == 0)
return "0";
return sb.toString();
}
protected static final char[] hexLetters = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
}