碼上快樂
1秒登錄
首頁
榜單
標簽
關於
搜索
相關內容
簡體
繁體
java中String\十六進制String\byte[]之間相互轉換函數
本文轉載自
查看原文
2017-03-10 11:48
1909
android提高篇
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];
}
×
免責聲明!
本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。
猜您在找
java中 Hex(十六進制)和byte[]相互轉換
[原創]PostgreSQL中十進制、二進制、十六進制之間的相互轉換
Java字節、十進制、十六進制、字符串之間的相互轉換
Java 十六進制(Hex)與byte數組之間的轉換(轉)
python基本語法1.1--十進制與十六進制數之間的相互轉換
進制轉換(二進制、八進制、十進制與十六進制之間的相互轉換)
【oracle】 十進制和十六進制相互轉換函數
字符串與十六進制數的相互轉換
js字符串與十六進制相互轉換
QByteArray和十六進制的QString(char*)相互轉換
粵ICP備18138465號
© 2018-2025 CODEPRJ.COM