HexTool.java
上传用户:gwt600
上传日期:2021-06-03
资源大小:704k
文件大小:5k
- /*
- This file is part of the OdinMS Maple Story Server
- Copyright (C) 2008 Patrick Huy <patrick.huy@frz.cc>
- Matthias Butz <matze@odinms.de>
- Jan Christian Meyer <vimes@odinms.de>
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License version 3
- as published by the Free Software Foundation. You may not use, modify
- or distribute this program under any other version of the
- GNU Affero General Public License.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- package net.sf.odinms.tools;
- import java.io.ByteArrayOutputStream;
- import org.apache.mina.common.ByteBuffer;
- /**
- * Provides a class for manipulating hexadecimal numbers.
- *
- * @author Frz
- * @since Revision 206
- * @version 1.0
- */
- public class HexTool {
- static private char[] HEX = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
- /**
- * Static class dummy constructor.
- */
- private HexTool() {
- }
- /**
- * Turns a byte into a hexadecimal string.
- *
- * @param byteValue The byte to convert.
- * @return The hexadecimal representation of <code>byteValue</code>
- */
- public static String toString(byte byteValue) {
- int tmp = byteValue << 8;
- char[] retstr = new char[] { HEX[(tmp >> 12) & 0x0F], HEX[(tmp >> 8) & 0x0F] };
- return String.valueOf(retstr);
- }
- /**
- * Turns a <code>org.apache.mina.common.ByteBuffer</code> into a
- * hexadecimal string.
- *
- * @param buf The <code>org.apache.mina.common.ByteBuffer</code> to
- * convert.
- * @return The hexadecimal representation of <code>buf</code>
- */
- public static String toString(ByteBuffer buf) {
- buf.flip();
- byte arr[] = new byte[buf.remaining()];
- buf.get(arr);
- String ret = toString(arr);
- buf.flip();
- buf.put(arr);
- return ret;
- }
- /**
- * Turns an integer into a hexadecimal string.
- *
- * @param intValue The integer to transform.
- * @return The hexadecimal representation of <code>intValue</code>.
- */
- public static String toString(int intValue) {
- return Integer.toHexString(intValue);
- }
- /**
- * Turns an array of bytes into a hexadecimal string.
- *
- * @param bytes The bytes to convert.
- * @return The hexadecimal representation of <code>bytes</code>
- */
- public static String toString(byte[] bytes) {
- StringBuilder hexed = new StringBuilder();
- for (int i = 0; i < bytes.length; i++) {
- hexed.append(toString(bytes[i]));
- hexed.append(' ');
- }
- return hexed.substring(0, hexed.length() - 1);
- }
- /**
- * Turns an array of bytes into a ASCII string. Any non-printable characters
- * are replaced by a period (<code>.</code>)
- *
- * @param bytes The bytes to convert.
- * @return The ASCII hexadecimal representation of <code>bytes</code>
- */
- public static String toStringFromAscii(byte[] bytes) {
- char[] ret = new char[bytes.length];
- for (int x = 0; x < bytes.length; x++) {
- if (bytes[x] < 32 && bytes[x] >= 0) {
- ret[x] = '.';
- } else {
- int chr = ((short) bytes[x]) & 0xFF;
- ret[x] = (char) chr;
- }
- }
- return String.valueOf(ret);
- }
-
- public static String toPaddedStringFromAscii(byte[] bytes) {
- String str = toStringFromAscii(bytes);
- StringBuilder ret = new StringBuilder(str.length() * 3);
- for (int i = 0; i < str.length(); i++) {
- ret.append(str.charAt(i));
- ret.append(" ");
- }
- return ret.toString();
- }
- /**
- * Turns an hexadecimal string into a byte array.
- *
- * @param hex The string to convert.
- * @return The byte array representation of <code>hex</code>
- */
- public static byte[] getByteArrayFromHexString(String hex) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- int nexti = 0;
- int nextb = 0;
- boolean highoc = true;
- outer: for (;;) {
- int number = -1;
- while (number == -1) {
- if (nexti == hex.length()) {
- break outer;
- }
- char chr = hex.charAt(nexti);
- if (chr >= '0' && chr <= '9') {
- number = chr - '0';
- } else if (chr >= 'a' && chr <= 'f') {
- number = chr - 'a' + 10;
- } else if (chr >= 'A' && chr <= 'F') {
- number = chr - 'A' + 10;
- } else {
- number = -1;
- }
- nexti++;
- }
- if (highoc) {
- nextb = number << 4;
- highoc = false;
- } else {
- nextb |= number;
- highoc = true;
- baos.write(nextb);
- }
- }
- return baos.toByteArray();
- }
- }