FileDocCategorySizeDatePackage
Hex.javaAPI DocAndroid 5.1 API8265Thu Mar 12 22:18:30 GMT 2015com.android.dx.util

Hex

public final class Hex extends Object
Utilities for formatting numbers as hexadecimal.

Fields Summary
Constructors Summary
private Hex()
This class is uninstantiable.

        // This space intentionally left blank.
    
Methods Summary
public static java.lang.Stringdump(byte[] arr, int offset, int length, int outOffset, int bpl, int addressLength)
Formats a hex dump of a portion of a {@code byte[]}. The result is always newline-terminated, unless the passed-in length was zero, in which case the result is always the empty string ({@code ""}).

param
arr {@code non-null;} array to format
param
offset {@code >= 0;} offset to the part to dump
param
length {@code >= 0;} number of bytes to dump
param
outOffset {@code >= 0;} first output offset to print
param
bpl {@code >= 0;} number of bytes of output per line
param
addressLength {@code {2,4,6,8};} number of characters for each address header
return
{@code non-null;} a string of the dump

        int end = offset + length;

        // twos-complement math trick: ((x < 0) || (y < 0)) <=> ((x|y) < 0)
        if (((offset | length | end) < 0) || (end > arr.length)) {
            throw new IndexOutOfBoundsException("arr.length " +
                                                arr.length + "; " +
                                                offset + "..!" + end);
        }

        if (outOffset < 0) {
            throw new IllegalArgumentException("outOffset < 0");
        }

        if (length == 0) {
            return "";
        }

        StringBuffer sb = new StringBuffer(length * 4 + 6);
        boolean bol = true;
        int col = 0;

        while (length > 0) {
            if (col == 0) {
                String astr;
                switch (addressLength) {
                    case 2:  astr = Hex.u1(outOffset); break;
                    case 4:  astr = Hex.u2(outOffset); break;
                    case 6:  astr = Hex.u3(outOffset); break;
                    default: astr = Hex.u4(outOffset); break;
                }
                sb.append(astr);
                sb.append(": ");
            } else if ((col & 1) == 0) {
                sb.append(' ");
            }
            sb.append(Hex.u1(arr[offset]));
            outOffset++;
            offset++;
            col++;
            if (col == bpl) {
                sb.append('\n");
                col = 0;
            }
            length--;
        }

        if (col != 0) {
            sb.append('\n");
        }

        return sb.toString();
    
public static java.lang.Strings1(int v)
Formats an {@code int} as a 1-byte signed hex value.

param
v value to format
return
{@code non-null;} formatted form

        char[] result = new char[3];

        if (v < 0) {
            result[0] = '-";
            v = -v;
        } else {
            result[0] = '+";
        }

        for (int i = 0; i < 2; i++) {
            result[2 - i] = Character.forDigit(v & 0x0f, 16);
            v >>= 4;
        }

        return new String(result);
    
public static java.lang.Strings2(int v)
Formats an {@code int} as a 2-byte signed hex value.

param
v value to format
return
{@code non-null;} formatted form

        char[] result = new char[5];

        if (v < 0) {
            result[0] = '-";
            v = -v;
        } else {
            result[0] = '+";
        }

        for (int i = 0; i < 4; i++) {
            result[4 - i] = Character.forDigit(v & 0x0f, 16);
            v >>= 4;
        }

        return new String(result);
    
public static java.lang.Strings4(int v)
Formats an {@code int} as a 4-byte signed hex value.

param
v value to format
return
{@code non-null;} formatted form

        char[] result = new char[9];

        if (v < 0) {
            result[0] = '-";
            v = -v;
        } else {
            result[0] = '+";
        }

        for (int i = 0; i < 8; i++) {
            result[8 - i] = Character.forDigit(v & 0x0f, 16);
            v >>= 4;
        }

        return new String(result);
    
public static java.lang.Strings8(long v)
Formats a {@code long} as an 8-byte signed hex value.

param
v value to format
return
{@code non-null;} formatted form

        char[] result = new char[17];

        if (v < 0) {
            result[0] = '-";
            v = -v;
        } else {
            result[0] = '+";
        }

        for (int i = 0; i < 16; i++) {
            result[16 - i] = Character.forDigit((int) v & 0x0f, 16);
            v >>= 4;
        }

        return new String(result);
    
public static java.lang.Stringu1(int v)
Formats an {@code int} as a 1-byte unsigned hex value.

param
v value to format
return
{@code non-null;} formatted form

        char[] result = new char[2];
        for (int i = 0; i < 2; i++) {
            result[1 - i] = Character.forDigit(v & 0x0f, 16);
            v >>= 4;
        }

        return new String(result);
    
public static java.lang.Stringu2(int v)
Formats an {@code int} as a 2-byte unsigned hex value.

param
v value to format
return
{@code non-null;} formatted form

        char[] result = new char[4];
        for (int i = 0; i < 4; i++) {
            result[3 - i] = Character.forDigit(v & 0x0f, 16);
            v >>= 4;
        }

        return new String(result);
    
public static java.lang.Stringu2or4(int v)
Formats an {@code int} as either a 2-byte unsigned hex value (if the value is small enough) or a 4-byte unsigned hex value (if not).

param
v value to format
return
{@code non-null;} formatted form

        if (v == (char) v) {
            return u2(v);
        } else {
            return u4(v);
        }
    
public static java.lang.Stringu3(int v)
Formats an {@code int} as a 3-byte unsigned hex value.

param
v value to format
return
{@code non-null;} formatted form

        char[] result = new char[6];
        for (int i = 0; i < 6; i++) {
            result[5 - i] = Character.forDigit(v & 0x0f, 16);
            v >>= 4;
        }

        return new String(result);
    
public static java.lang.Stringu4(int v)
Formats an {@code int} as a 4-byte unsigned hex value.

param
v value to format
return
{@code non-null;} formatted form

        char[] result = new char[8];
        for (int i = 0; i < 8; i++) {
            result[7 - i] = Character.forDigit(v & 0x0f, 16);
            v >>= 4;
        }

        return new String(result);
    
public static java.lang.Stringu8(long v)
Formats a {@code long} as an 8-byte unsigned hex value.

param
v value to format
return
{@code non-null;} formatted form

        char[] result = new char[16];
        for (int i = 0; i < 16; i++) {
            result[15 - i] = Character.forDigit((int) v & 0x0f, 16);
            v >>= 4;
        }

        return new String(result);
    
public static java.lang.StringuNibble(int v)
Formats an {@code int} as a 4-bit unsigned hex nibble.

param
v value to format
return
{@code non-null;} formatted form

        char[] result = new char[1];

        result[0] = Character.forDigit(v & 0x0f, 16);
        return new String(result);