Android图片的十六进制字符串和Byte数组的转化
这几天在弄打印的相关事情,由于打印的内容是从服务端传递过来的,服务端是使用的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();
}
上一篇: 蓝桥杯——高精度加法
下一篇: 原生和js交互 简单代码
推荐阅读
-
Android图片的十六进制字符串和Byte数组的转化
-
java中16进制字符串与普通字符串与byte数组之间的相互转化
-
十六进制数组和二进制字符串的相互转换
-
Android字符串和十六进制相互转化出现的中文乱码问题
-
Android字符串和十六进制相互转化出现的中文乱码问题
-
C# 中字符串string和字节数组byte[]的相互转换
-
将传进来的十六进制表示的字符串转换成byte数组 文件下载
-
java - php如何字符串转二进制数组后对二进制数组进行md5摘要,对摘要后的二进制数组转化为十六进制字符串输出?
-
Android中 二进制、十进制、十六进制串、byte数组、字符串、ASCII之间的相互转化
-
Android开发中十六进制和十进制的相互转化