这几天在弄打印的相关事情,由于打印的内容是从服务端传递过来的,服务端是使用的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();
/*16进制
byte
数组
转String*/
public static String
byte
s2HexString(
byte
[] b) {
String r = "";
for (int i = 0; i < b.length; i++) {
/*** 将
图片
转换成
十六进制
字符串
* @param photo* @return*/public static String sendPhoto(ImageView photo) {Drawable d = photo.getDrawable();Bitmap bitmap=((BitmapDrawable)d).getBitmap();
Byte
ArrayOutputStream stream ...
data = data.toUpperCase(); //
转化
为大写
int len = data.length()/2;
byte
[] sendData = new b...
procedure Hex2Png(str: string; outpng: TPngObject);varstream: TMemoryStream;beginif not Assigned(png) then png := TPngObject.Create;stream := TMemoryStream.Create;stream.SetSize(Length(str)div 2);HexT...
图片
数据是验主码 TCP服务端返回的数据是下面这个.下面是16进制的数据:2F396A2F34414151536B5A4A5267414241674141415141424141442F327742444141674742676347425167484277634A4351674B4442514E4441734C44426B534577385548526F66486830615C6E4842776...
try {
fis = new FileInputStream("water_mark_logo.png");
Byte
ArrayOutputStream bos = new
Byte
ArrayOutput
public static
byte
[] HexStringTo
Byte
Array(String hexString){
//hexString的长度对2取整,作为
byte
s的长度
int len = h...
想起前段时间的物联网的外包开发,经常遇到通过wifi接受的数据,要通过转换成
十六进制
字符串
,或者最后又是十进制数据。都是根据双方的协议来开发的。那么我发送过去的数据也需要,经过特殊转换成
byte
字节发过去,硬件那边收到不至于乱码的数据。
1、硬件调试发给
android
这边是
十六进制
数据
原始数据:68 38 38 68 A 72 78 55 34 12 43 23 01 07 Y 00 00 0...
原文:http://www.cppblog.com/magicqy/archive/2009/02/16/73975.html
BMP文件是一种像素文件,它保存了一幅图象中所有的像素。这种文件格式可以保存单色位图、16色或256色索引模式像素图、24位真彩色图象,每种模式种单一像素的大小分别为1/8字节,1/2字节,1字节和3字节。目前最常见的是256色BMP和24位色BMP。这种文件格式还定义...
#3////////////////////////////////////////////////////////////////Name:bmp.c//Purpose:Toopenabitmapfileanddisplayitonscreen.//Author:phoenix,CS,TshingHua,Beijing,P.R.C//Email:bjlufengj...