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
當扎瓦
閱讀(4771)
評論(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 © 當扎瓦
<
2013年4月
>
日
一
二
三
四
五
六
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
1
2
3
4
5
6
7
8
9
10
11
統計
隨筆 - 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編碼轉換 (轉)(4771)
2.?Java 通過串口發短信1(轉)(1857)
3.?Java 通過串口發短信2(轉)(1322)
4.?JAVA面試題(993)
5.?Hibernate-Criteria Query 轉(550)
評論排行榜
1.?Java 通過串口發短信1(轉)(3)
2.?Java 通過串口發短信2(轉)(2)
3.?java二進制,字節數組,字符,十六進制,BCD編碼轉換 (轉)(1)
4.?JAVA面試題(1)
5.?struts的action是非線程安全的(0)
主站蜘蛛池模板:
无为县
|
内江市
|
徐闻县
|
班玛县
|
封丘县
|
娱乐
|
大余县
|
都江堰市
|
马边
|
阳曲县
|
长丰县
|
山东省
|
和田县
|
司法
|
山阳县
|
师宗县
|
云阳县
|
泰宁县
|
双鸭山市
|
桐城市
|
疏勒县
|
中牟县
|
五常市
|
库伦旗
|
滦南县
|
镇远县
|
宁国市
|
九寨沟县
|
阜城县
|
南雄市
|
九台市
|
麻江县
|
徐水县
|
三门峡市
|
屏山县
|
禄劝
|
玛纳斯县
|
枞阳县
|
孙吴县
|
龙江县
|
探索
|