docs: public byte[] getData(byte[] dst, int offset)
  	{
  		final int end = Math.min(data.length, dst.length - offset) & ~0x03;
  		for (int i = 0; i < end; ++i)
  			dst[offset + i] = (byte) data[i];
  		return dst;
  	}
  
  	/* (non-Javadoc)
  	 * @see tuwien.auto.calimero.dptxlator.DPTXlator#getSubTypes()
  	 */
  	public final Map getSubTypes()
  	{
  		return types;
  	}
  
  	/**
  	 * @return the subtypes of the 4-byte unsigned translator type
  	 * @see DPTXlator#getSubTypesStatic()
  	 */
  	protected static Map getSubTypesStatic()
  	{
  		return types;
  	}
  
  	private long fromDPT(int index)
  	{
  		final int i = 4 * index;
  		return (long) data[i] << 24 | data[i + 1] << 16 | data[i + 2] << 8 | data[i + 3];
  	}
  
  	private String makeString(int index)
  	{
  		return appendUnit(Long.toString(fromDPT(index)));
  	}
  
  	protected void toDPT(String value, short[] dst, int index) throws KNXFormatException
  	{
  		try {
  			toDPT(Long.decode(removeUnit(value)).longValue(), dst, index);
  		}
  		catch (final NumberFormatException e) {
  			throw logThrow(LogLevel.WARN, "wrong value format " + value, null, value);
  		}
  	}
  
  	private short[] toDPT(long value, short[] dst, int index) throws KNXFormatException
  	{
  		if (value < 0 || value > 0xFFFFFFFFL)
  			throw logThrow(LogLevel.WARN, "translation error for " + value,
  				"input value out of range", Long.toString(value));
  		final int i = 4 * index;
  		dst[i] = (short) ((value >> 24) & 0xFF);
  		dst[i + 1] = (short) ((value >> 16) & 0xFF);
  		dst[i + 2] = (short) ((value >> 8) & 0xFF);
  		dst[i + 3] = (short) (value & 0xFF);
  		return dst;
  	}
  }