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
當扎瓦
閱讀(4772)
評論(1)
編輯
收藏
評論
#
re: java二進制,字節數組,字符,十六進制,BCD編碼轉換 (轉)
2013-04-12 19:38
Yakov
誤人子弟!~~
String s= "c20ad4d76fe97759aa27a0c99bff6710";
System.out.println(s);
System.out.println(bytesToHexString(hexStringToByte(s)));
試試這段代碼,就知道完全不正確!~
回復
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
Powered by:
BlogJava
Copyright © 當扎瓦
<
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編碼轉換 (轉)(4772)
2.?Java 通過串口發短信1(轉)(1858)
3.?Java 通過串口發短信2(轉)(1323)
4.?JAVA面試題(994)
5.?Hibernate-Criteria Query 轉(551)
評論排行榜
1.?Java 通過串口發短信1(轉)(3)
2.?Java 通過串口發短信2(轉)(2)
3.?java二進制,字節數組,字符,十六進制,BCD編碼轉換 (轉)(1)
4.?JAVA面試題(1)
5.?struts的action是非線程安全的(0)
主站蜘蛛池模板:
普宁市
|
永仁县
|
日照市
|
嘉义县
|
和田县
|
景泰县
|
旅游
|
抚顺市
|
廉江市
|
清河县
|
河南省
|
梁平县
|
呈贡县
|
商洛市
|
花莲市
|
玉屏
|
古田县
|
东台市
|
鹤壁市
|
鲁甸县
|
特克斯县
|
清河县
|
越西县
|
鄢陵县
|
金坛市
|
大厂
|
水富县
|
建阳市
|
宜兰市
|
凤凰县
|
云和县
|
石渠县
|
婺源县
|
舟曲县
|
龙口市
|
东兴市
|
深水埗区
|
九龙坡区
|
苗栗县
|
滨海县
|
琼海市
|