Объявите указатель вашей функции следующим образом:
bool (*f)();
f = A;
f();
Я бы предложил что-то вроде этого, где str
- ваша строка ввода:
StringBuffer hex = new StringBuffer();
char[] raw = tokens[0].toCharArray();
for (int i=0;i<raw.length;i++) {
if (raw[i]<=0x000F) { hex.append("000"); }
else if(raw[i]<=0x00FF) { hex.append("00" ); }
else if(raw[i]<=0x0FFF) { hex.append("0" ); }
hex.append(Integer.toHexString(raw[i]).toUpperCase());
}
byte[] bytes = string.getBytes(CHARSET); // you didn't say what charset you wanted
BigInteger bigInt = new BigInteger(bytes);
String hexString = bigInt.toString(16); // 16 is the radix
На этом этапе вы можете вернуть hexString
, с оговоркой, что ведущие нулевые символы будут удалены, и результат будет иметь нечетную длину, если первый байт меньше 16. Если вам нужно обработать эти случаи, вы можете добавить дополнительный код в поле с нулями:
StringBuilder sb = new StringBuilder();
while ((sb.length() + hexString.length()) < (2 * bytes.length)) {
sb.append("0");
}
sb.append(hexString);
return sb.toString();
Числа, которые вы кодируете в шестнадцатеричном формате, должны представлять некоторую кодировку символов, например UTF-8. Итак, сначала преобразуйте String в byte [], представляющий строку в этой кодировке, затем преобразуйте каждый байт в шестнадцатеричный.
public static String hexadecimal(String input, String charsetName) throws UnsupportedEncodingException {
if (input == null) throw new NullPointerException();
return asHex(input.getBytes(charsetName));
}
private static final char[] HEX_CHARS = "0123456789abcdef".toCharArray();
public static String asHex(byte[] buf)
{
char[] chars = new char[2 * buf.length];
for (int i = 0; i < buf.length; ++i)
{
chars[2 * i] = HEX_CHARS[(buf[i] & 0xF0) >>> 4];
chars[2 * i + 1] = HEX_CHARS[buf[i] & 0x0F];
}
return new String(chars);
}
Вот короткий способ преобразовать его в Hex:
public String toHex(String arg) {
return String.format("%040x", new BigInteger(1, arg.getBytes(/*YOUR_CHARSET?*/)));
}