欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android图片的十六进制字符串和Byte数组的转化

程序员文章站 2024-03-17 11:20:22
...

这几天在弄打印的相关事情,由于打印的内容是从服务端传递过来的,服务端是使用的C#,在C#中是有一些关于报表的控件的,通过这个控件可以直接生产成一个打印的报表,这个打印的报表就是我所需要的内容(因为这个报表中有一些C#自己设置的模板),最后决定把这个报表按照图片传递过来。但是这个图片在服务端存储的是十六进制的字符串,所以在android端只能通过解析这个字符串为字节数组,再把这个字节数组通过BitmapFactory.decodeByteArray()方法转为一张bitmap图片,此为图片转化的全部流程。
以下是转化的代码:
在传递回来的string字符串中有0x开头的,需要去掉这个在进行转化
如:string str = “0xFF12D0A5571782………..”这个返回的str就是有0x的。需改为str = “FF12D0A5571782………..”这样的才可以使用下面的方法。

   /**
     * 十六进制字符串转化为数组
     */
    public static byte[] stringToByte(String str) {
        if (str == null) {
            return null;
        }
        int length = str.length() / 2;
        byte[] bytes = new byte[length];
        for (int i = 0; i < length; i++) {
            bytes[i] = (byte) ((Character.digit(str.charAt(i * 2), 16) << 4) |
                    Character.digit(str.charAt((i * 2) + 1), 16));
        }
        return bytes;
    }

其中digit方法:查看这个char的内容是不是当前进制(radix)的数值
static int digit(char ch, int radix) :根据基数返回当前字符的值的十进制。如果不满足Character.MIN_RADIX <= radix <= Character.MAX_RADIX,或者,ch不是radix基数中的有效值,返回”-1”;如果ch是“大写”的A到Z之间,则返回ch - ‘A’ + 10 的值;如果是“小写”a到z之间,返回ch - ‘a’ + 10 的值。
代码:
System.out.println(“Character.MIN_RADIX: ” + Character.MIN_RADIX );
System.out.println(“Character.MAX_RADIX: ” + Character.MAX_RADIX );
System.out.println(“Character.digit(‘2’,2): ” + Character.digit(‘2’,2) );
System.out.println(“Character.digit(‘7’,10): ” + Character.digit(‘7’,10) );
System.out.println(“Character.digit(‘F’,16): ” + Character.digit(‘F’,16) );
结果为:
Character.MIN_RADIX: 2
Character.MAX_RADIX: 36
Character.digit(‘2’,2): -1 不是有效值。
Character.digit(‘7’,10): 7
Character.digit(‘F’,16): 15

下面是字节数组转化为十六进制

    /**
     * 字节数组转为十六进制
     */
    public static String bytesToHexString(byte[] src) {
        if (src == null || src.length <= 0) {
            return null;
        }
        StringBuilder stringBuilder = new StringBuilder("");
        for (int i = 0; i < src.length; i++) {
            int v = src[i] & 0xFF;
            String hv = Integer.toHexString(v);
            if (hv.length() < 2) {
                stringBuilder.append(0);
            }
            stringBuilder.append(hv);
        }
        return stringBuilder.toString();

    }