1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | public static byte[] intToBCDBytes(long num) { return intToBCDBytes(num, 0); } public static byte[] intToBCDBytes(long num, int minBytes) { int digits = 0; long temp = num; while (temp != 0) { digits++; temp /= 10; } int byteLen = digits % 2 == 0 ? digits / 2 : (digits + 1) / 2; boolean isOdd = digits % 2 != 0; if (byteLen < minBytes) byteLen = minBytes; byte bcd[] = new byte[byteLen]; for (int i = 0; i < digits; i++) { byte tmp = (byte) (num % 10); if (i == digits - 1 && isOdd) bcd[i / 2] = tmp; else if (i % 2 == 0) bcd[i / 2] = tmp; else { byte foo = (byte) (tmp << 4); bcd[i / 2] |= foo; } num /= 10; } for (int i = 0; i < byteLen / 2; i++) { byte tmp = bcd[i]; bcd[i] = bcd[byteLen - i - 1]; bcd[byteLen - i - 1] = tmp; } return bcd; } public static String bcdToString(byte bcd) { StringBuffer sb = new StringBuffer(); byte high = (byte) (bcd & 0xf0); high >>>= (byte) 4; high = (byte) (high & 0x0f); byte low = (byte) (bcd & 0x0f); sb.append(high); sb.append(low); return sb.toString(); } public static Integer bcdToInt(byte[] bcd) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < bcd.length; i++) { sb.append(bcdToString(bcd[i])); } return new Integer(sb.toString()); } |
Wednesday, 29 May 2019
BCD Length From Long
Subscribe to:
Posts (Atom)