Convert an int into the corresponding byte array by encoding each two hexadecimal digits as a char. - Java File Path IO

Java examples for File Path IO:Byte Array

Description

Convert an int into the corresponding byte array by encoding each two hexadecimal digits as a char.

Demo Code

/*/* ww  w .java2 s . c om*/
 * 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.
 */
//package com.java2s;
import java.io.ByteArrayOutputStream;

public class Main {
    public static void main(String[] argv) throws Exception {
        int integer = 2;
        System.out.println(java.util.Arrays.toString(convert(integer)));
    }

    /**
     * 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(final int integer, final int bufsize) {
        final StringBuilder buf = new StringBuilder(
                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(final 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;
        }

        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
        for (int i = 0; i < digits.length(); i += 2) {
            final char c1 = digits.charAt(i);
            final 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();
    }
}

Related Tutorials