Hi,
das seltsamste, das ich seit langen gemacht hab.
Websphere MQ speichert bestimmte IDs als byte arrays mit 32 Elementen.
Zur Anzeige wollen die das aber als hex-Werte.
Der Wertebereich des primitiven Datentyps byte ist in Java -128 bis 127.
Ein Byte kann also durch 2 Hexadezimalziffern dargestellt werden: 16 * 16.
Nach diesen eigenständigen Überlegungen, hab ich mir den Code per google geholt.
Diese byte -> hex und hex-> byte Operationen scheinen recht gebräuchlich in gewissen Domains zu sein.
Hier ist das Prachtstück:
| |
| |
| |
| |
| package de.spintegration.mqseries.client.converter; |
| |
| import java.math.BigInteger; |
| |
| |
| |
| |
| |
| public class ByteArrayConverter implements IConverter { |
| |
| public String getStrValue(Object obj) { |
| if (obj == null) { |
| return null; |
| } |
| |
| byte[] arrByte = (byte[]) obj; |
| String ret = ""; |
| for (int i = 0; i < arrByte.length; i++) { |
| |
| char b = (char) (arrByte[i] & 0xFF); |
| if (b < 0x10) { |
| ret = ret + "0"; |
| } |
| ret = ret + (String) (Integer.toHexString(b)).toUpperCase(); |
| } |
| |
| return ret; |
| |
| } |
| |
| public Object getObj(String strValue) { |
| if (strValue == null) { |
| return new byte[]{}; |
| } else { |
| byte[] bts = new BigInteger(strValue, 16).toByteArray(); |
| |
| return bts; |
| } |
| |
| } |
| } |