123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- /* $Id$ */
-
- package org.apache.fop.afp.util;
-
- import java.io.ByteArrayOutputStream;
-
- /**
- * Library of utility useful conversion methods.
- *
- */
- public final class BinaryUtils {
-
- private BinaryUtils() {
- }
-
- /**
- * Convert an int into the corresponding byte array by encoding each
- * two hexadecimal digits as a char. This will return a byte array
- * to the length specified by bufsize.
- * @param integer The int representation.
- * @param bufsize The required byte array size.
- * @return the hexadecimal digits as a byte array
- */
- public static byte[] convert(int integer, int bufsize) {
- StringBuffer buf = new StringBuffer(Integer.toHexString(integer));
- //Convert to an even number of digits
- if (buf.length() % 2 != 0) {
- buf.insert(0, "0");
- }
- int size = buf.length() / 2;
- if (size > bufsize) {
- buf.delete(0, buf.length() - (bufsize * 2));
- } else {
- while (size < bufsize) {
- buf.insert(0, "00");
- size++;
- }
- }
- return convert(buf.toString());
- }
-
- /**
- * Convert an int into the corresponding byte array by encoding each
- * two hexadecimal digits as a char.
- * @param integer The int representation
- * @return the hexadecimal digits as a byte array
- */
- public static byte[] convert(int integer) {
- return convert(Integer.toHexString(integer));
- }
-
- /**
- * Convert a String of hexadecimal digits into the corresponding
- * byte array by encoding each two hexadecimal digits as a byte.
- * @param digits The hexadecimal digits representation.
- * @return the hexadecimal digits as a byte array
- */
- public static byte[] convert(String digits) {
-
- if (digits.length() % 2 == 0) {
- // Even number of digits, so ignore
- } else {
- // Convert to an even number of digits
- digits = "0" + digits;
- }
-
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- for (int i = 0; i < digits.length(); i += 2) {
- char c1 = digits.charAt(i);
- char c2 = digits.charAt(i + 1);
- byte b = 0;
- if ((c1 >= '0') && (c1 <= '9')) {
- b += ((c1 - '0') * 16);
- } else if ((c1 >= 'a') && (c1 <= 'f')) {
- b += ((c1 - 'a' + 10) * 16);
- } else if ((c1 >= 'A') && (c1 <= 'F')) {
- b += ((c1 - 'A' + 10) * 16);
- } else {
- throw new IllegalArgumentException("Bad hexadecimal digit");
- }
-
- if ((c2 >= '0') && (c2 <= '9')) {
- b += (c2 - '0');
- } else if ((c2 >= 'a') && (c2 <= 'f')) {
- b += (c2 - 'a' + 10);
- } else if ((c2 >= 'A') && (c2 <= 'F')) {
- b += (c2 - 'A' + 10);
- } else {
- throw new IllegalArgumentException("Bad hexadecimal digit");
- }
- baos.write(b);
- }
- return (baos.toByteArray());
- }
-
- /**
- * Convert the specified short into a byte array.
- * @param value The value to be converted.
- * @param array The array to receive the data.
- * @param offset The offset into the byte array for the start of the value.
- */
- public static void shortToByteArray(
- short value,
- byte[] array,
- int offset) {
- array[offset] = (byte) (value >>> 8);
- array[offset + 1] = (byte) value;
- }
-
- /**
- * Convert the specified short into a byte array.
- * @param value The value to be converted.
- * @return The byte array
- */
- public static byte[] shortToByteArray(short value) {
- byte[] serverValue = new byte[2];
- shortToByteArray(value, serverValue, 0);
- return serverValue;
- }
-
- }
|