X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altoslib%2FAltosLib.java;fp=altoslib%2FAltosLib.java;h=c3c1226ed4ec7a4ec8a8412e71ac763232140c01;hp=68bdd17fdcbe95621842963f29ad5dbe67e42f78;hb=ef1dd370564b99da033109f2fb5f7bf29711a13f;hpb=ee9f68ec877e3e5a67179f8c8abafbccc80eb804 diff --git a/altoslib/AltosLib.java b/altoslib/AltosLib.java index 68bdd17f..c3c1226e 100644 --- a/altoslib/AltosLib.java +++ b/altoslib/AltosLib.java @@ -329,7 +329,7 @@ public class AltosLib { return false; } - public static boolean ishex(int c) { + public static final boolean ishex(int c) { if ('0' <= c && c <= '9') return true; if ('a' <= c && c <= 'f') @@ -339,7 +339,7 @@ public class AltosLib { return false; } - public static boolean ishex(String s) { + public static final boolean ishex(String s) { for (int i = 0; i < s.length(); i++) if (!ishex(s.charAt(i))) return false; @@ -463,10 +463,17 @@ public class AltosLib { if ((s.length() & 1) != 0) throw new NumberFormatException(String.format("invalid line \"%s\"", s)); - n = s.length() / 2; + byte[] bytes = s.getBytes(unicode_set); + n = bytes.length / 2; r = new int[n]; - for (i = 0; i < n; i++) - r[i] = hexbyte(s, i * 2); + for (i = 0; i < n; i++) { + int h = fromhex(bytes[(i << 1)]); + int l = fromhex(bytes[(i << 1) + 1]); + if (h < 0 || l < 0) + throw new NumberFormatException(String.format("invalid hex \"%c%c\"", + bytes[(i<<1)], bytes[(i<<1) + 1])); + r[i] = (h << 4) + l; + } return r; }