dangjava
BlogJava
首页
新随笔
联系
聚合
管理
数据加载中……
java二进制,字节数组,字符,十六进制,BCD编码转换 (转)
java二进制,字节数组,字符,十六进制,BCD编码转换2007
-
06
-
07
00
:
17
/** */
/**
* 把16进制字符串转换成字节数组
*
@param
hex
*
@return
*/
public
static
byte
[] hexStringToByte(String hex)
{
int
len
=
(hex.length()
/
2
);
byte
[] result
=
new
byte
[len];
char
[] achar
=
hex.toCharArray();
for
(
int
i
=
0
; i
<
len; i
++
)
{
int
pos
=
i
*
2
;
result[i]
=
(
byte
) (toByte(achar[pos])
<<
4
|
toByte(achar[pos
+
1
]));
}
return
result;
}
private
static
byte
toByte(
char
c)
{
byte
b
=
(
byte
)
"
0123456789ABCDEF
"
.indexOf(c);
return
b;
}
/** */
/**
* 把字节数组转换成16进制字符串
*
@param
bArray
*
@return
*/
public
static
final
String bytesToHexString(
byte
[] bArray)
{
StringBuffer sb
=
new
StringBuffer(bArray.length);
String sTemp;
for
(
int
i
=
0
; i
<
bArray.length; i
++
)
{
sTemp
=
Integer.toHexString(
0xFF
&
bArray[i]);
if
(sTemp.length()
<
2
)
sb.append(
0
);
sb.append(sTemp.toUpperCase());
}
return
sb.toString();
}
/** */
/**
* 把字节数组转换为对象
*
@param
bytes
*
@return
*
@throws
IOException
*
@throws
ClassNotFoundException
*/
public
static
final
Object bytesToObject(
byte
[] bytes)
throws
IOException, ClassNotFoundException
{
ByteArrayInputStream in
=
new
ByteArrayInputStream(bytes);
ObjectInputStream oi
=
new
ObjectInputStream(in);
Object o
=
oi.readObject();
oi.close();
return
o;
}
/** */
/**
* 把可序列化对象转换成字节数组
*
@param
s
*
@return
*
@throws
IOException
*/
public
static
final
byte
[] objectToBytes(Serializable s)
throws
IOException
{
ByteArrayOutputStream out
=
new
ByteArrayOutputStream();
ObjectOutputStream ot
=
new
ObjectOutputStream(out);
ot.writeObject(s);
ot.flush();
ot.close();
return
out.toByteArray();
}
public
static
final
String objectToHexString(Serializable s)
throws
IOException
{
return
bytesToHexString(objectToBytes(s));
}
public
static
final
Object hexStringToObject(String hex)
throws
IOException, ClassNotFoundException
{
return
bytesToObject(hexStringToByte(hex));
}
/** */
/**
* @函数功能: BCD码转为10进制串(阿拉伯数据)
* @输入参数: BCD码
* @输出结果: 10进制串
*/
public
static
String bcd2Str(
byte
[] bytes)
{
StringBuffer temp
=
new
StringBuffer(bytes.length
*
2
);
for
(
int
i
=
0
;i
<
bytes.length;i
++
)
{
temp.append((
byte
)((bytes[i]
&
0xf0
)
>>>
4
));
temp.append((
byte
)(bytes[i]
&
0x0f
));
}
return
temp.toString().substring(
0
,
1
).equalsIgnoreCase(
"
0
"
)
?
temp.toString().substring(
1
):temp.toString();
}
/** */
/**
* @函数功能: 10进制串转为BCD码
* @输入参数: 10进制串
* @输出结果: BCD码
*/
public
static
byte
[] str2Bcd(String asc)
{
int
len
=
asc.length();
int
mod
=
len
%
2
;
if
(mod
!=
0
)
{
asc
=
"
0
"
+
asc;
len
=
asc.length();
}
byte
abt[]
=
new
byte
[len];
if
(len
>=
2
)
{
len
=
len
/
2
;
}
byte
bbt[]
=
new
byte
[len];
abt
=
asc.getBytes();
int
j, k;
for
(
int
p
=
0
; p
<
asc.length()
/
2
; p
++
)
{
if
( (abt[
2
*
p]
>=
'
0
'
)
&&
(abt[
2
*
p]
<=
'
9
'
))
{
j
=
abt[
2
*
p]
-
'
0
'
;
}
else
if
( (abt[
2
*
p]
>=
'
a
'
)
&&
(abt[
2
*
p]
<=
'
z
'
))
{
j
=
abt[
2
*
p]
-
'
a
'
+
0x0a
;
}
else
{
j
=
abt[
2
*
p]
-
'
A
'
+
0x0a
;
}
if
( (abt[
2
*
p
+
1
]
>=
'
0
'
)
&&
(abt[
2
*
p
+
1
]
<=
'
9
'
))
{
k
=
abt[
2
*
p
+
1
]
-
'
0
'
;
}
else
if
( (abt[
2
*
p
+
1
]
>=
'
a
'
)
&&
(abt[
2
*
p
+
1
]
<=
'
z
'
))
{
k
=
abt[
2
*
p
+
1
]
-
'
a
'
+
0x0a
;
}
else
{
k
=
abt[
2
*
p
+
1
]
-
'
A
'
+
0x0a
;
}
int
a
=
(j
<<
4
)
+
k;
byte
b
=
(
byte
) a;
bbt[p]
=
b;
}
return
bbt;
}
/** */
/**
* @函数功能: BCD码转ASC码
* @输入参数: BCD串
* @输出结果: ASC码
*/
public
static
String BCD2ASC(
byte
[] bytes)
{
StringBuffer temp
=
new
StringBuffer(bytes.length
*
2
);
for
(
int
i
=
0
; i
<
bytes.length; i
++
)
{
int
h
=
((bytes[i]
&
0xf0
)
>>>
4
);
int
l
=
(bytes[i]
&
0x0f
);
temp.append(BToA[h]).append( BToA[l]);
}
return
temp.toString() ;
}
/** */
/**
* MD5加密字符串,返回加密后的16进制字符串
*
@param
origin
*
@return
*/
public
static
String MD5EncodeToHex(String origin)
{
return
bytesToHexString(MD5Encode(origin));
}
/** */
/**
* MD5加密字符串,返回加密后的字节数组
*
@param
origin
*
@return
*/
public
static
byte
[] MD5Encode(String origin)
{
return
MD5Encode(origin.getBytes());
}
/** */
/**
* MD5加密字节数组,返回加密后的字节数组
*
@param
bytes
*
@return
*/
public
static
byte
[] MD5Encode(
byte
[] bytes)
{
MessageDigest md
=
null
;
try
{
md
=
MessageDigest.getInstance(
"
MD5
"
);
return
md.digest(bytes);
}
catch
(NoSuchAlgorithmException e)
{
e.printStackTrace();
return
new
byte
[
0
];
}
}
//
关于byte: signed byte 把 0x00 ~ 0xff 映射成范围 0~127和 -128~-1 两段,比较简单的办法用 (b+256)%256的办法令其值回到0~255,或者用&0xff并赋给一个int。参考http:
//
www.jsfsoft.com:8080/beyond-pebble/pinxue/2006/08/23/1156309692525.html
posted on 2007-08-27 11:02
当扎瓦
阅读(4753)
评论(1)
编辑
收藏
评论
#
re: java二进制,字节数组,字符,十六进制,BCD编码转换 (转)
2013-04-12 19:38
Yakov
误人子弟!~~
String s= "c20ad4d76fe97759aa27a0c99bff6710";
System.out.println(s);
System.out.println(bytesToHexString(hexStringToByte(s)));
试试这段代码,就知道完全不正确!~
回复
更多评论
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
<
2007年8月
>
日
一
二
三
四
五
六
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
统计
随笔 - 20
文章 - 3
评论 - 8
引用 - 0
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(2)
给我留言
查看公开留言
查看私人留言
随笔档案
2007年9月 (12)
2007年8月 (8)
文章分类
Hibernate
(rss)
Java Basic
(rss)
Spring(3)
(rss)
Struts(1)
(rss)
文章档案
2007年8月 (3)
搜索
最新评论
1. re: java二进制,字节数组,字符,十六进制,BCD编码转换 (转)
评论内容较长,点击标题查看
--Yakov
2. re: Java 通过串口发短信1(转)[未登录]
Good , thank you ,
I have found for it for a long time
--kenny
3. re: Java 通过串口发短信2(转)
评论内容较长,点击标题查看
--kingstone
4. re: struts中Action是非线程安全的!
singleton默认就是true的啊
--guest
5. re: Java 通过串口发短信2(转)
我就照你的方法做的,还是不能发,能帮我看看吗
我的qq:414638049,谢了
--begin
阅读排行榜
1. java二进制,字节数组,字符,十六进制,BCD编码转换 (转)(4753)
2. Java 通过串口发短信1(转)(1846)
3. Java 通过串口发短信2(转)(1316)
4. JAVA面试题(989)
5. Hibernate-Criteria Query 转(549)
评论排行榜
1. Java 通过串口发短信1(转)(3)
2. Java 通过串口发短信2(转)(2)
3. java二进制,字节数组,字符,十六进制,BCD编码转换 (转)(1)
4. JAVA面试题(1)
5. struts的action是非线程安全的(0)