Преобразование строки из decimal в hex
Здрасте, господа! Нуждаюсь в следующей помощи: Работаю с SNMP протоколом для xPON технологии. Суть программы - парсинг и вывод всевозможных данных о коммутаторе вместо ввода множества команд в консоль. Парсинг проходит по OID'ам. OID представляет последовательность типа (1.3.6.1.4.1.35265.1.22.3.1.1.11.%s.8.%s), где %s - уникальные данные об устройстве (серийный номер, затухание и т.д.). Конкретно этот OID содержит инфу о серийных номерах на станционном оборудовании. Вопрос в следующем: как строку такого типа конвертировать в hex формат по типу 5A544547C8BD7F94 (серийник ONT)? И как дать программе понять, что %s - это данные об оборудовании? У меня есть метод, который из hex выведет десятичную последовательность, но вот как обратную конвертацию провернуть я не знаю. Будьте добры, помогите, кто имеет возможность и представление, как это сделать))
А вот и конвертер из hex в OID:
public String serialToDec(String dec)
{
StringBuilder builder = new StringBuilder();
for (int i = 0; i < dec.length(); i += 2)
{
String sub = dec.substring(i, i + 2);
long num = Long.parseLong(sub, 16);
builder.append(num).append(".");
}
String result = builder.toString();
result = result.substring(0, result.length() - 1);
System.out.println(result);
return result;
}
Ответы (2 шт):
Для перевода из десятичной системы в hex - можно Integer.toHexString() использовать.
Что касается вашего второго вопроса "И как дать программе понять, что %s - это данные об оборудовании?" - насколько я понимаю, позиция %s в строке фиксирована.
Соответственно, можете сделать примерно следующее:
String s; //incoming string
String[] deviceData=s.split(".");
И затем обращаетесь к соответствующему элементу массива.
Я в свое время аналогичную задачу решал так:
private static final String HEX="0123456789ABCDEF";
/**
* Convenience method to convert a byte array to a hex string.
*
* @param array the byte[] to convert
* @return String the converted byte[]
*/
public static String bytesToHex(byte[] array) {
if(array==null)
return "";
char[] val=new char[2 * array.length];
for(int i=0; i < array.length; i++) {
int b=array[i] & 0xff;
val[2 * i]=HEX.charAt(b >>> 4);
val[2 * i + 1]=HEX.charAt(b & 15);
}
return String.valueOf(val);
}
public static byte[] intToByteArray(int value) {
return new byte[]
{
(byte) (value >>> 24),
(byte) (value >>> 16),
(byte) (value >>> 8),
(byte) value
};
}