1.常用类型和byte[]互转的ByteHelper ;
2.BCD码压缩的BCDHelper ;
3.CRC、XOR的CheckHelper 。
ByteHelper
package com.van.base;
import java.io.UnsupportedEncodingException;
public class ByteHelper {
/**
* @Title: UInt16ToByte2
* @Description: TODO(将UInt16转化为byte2)
*
* @param Val
* @return
* @return :byte[]
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static byte [] UInt16ToByte2(Integer Val) {
byte [] bts = new byte [2];
bts[0] = ( byte ) ((0xff00 & Val) >> 8);
bts[1] = ( byte ) (0xff & Val);
return bts;
}
/**
* @Title: UInt16ToByte2
* @Description: TODO(将UInt16转化为byte2)
*
* @param i
* @param bts
* @param offset
* @return :void
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static void UInt16ToByte2(Integer i, byte [] bts, int offset) {
byte [] btsTemp = UInt16ToByte2(i);
int index = 0;
while (index < 2) {
bts[index + offset] = btsTemp[index];
index += 1;
}
}
/**
* @Title: Int16ToByte2
* @Description: TODO(将Int16转化为byte2)
*
* @param Val
* @return
* @return :byte[]
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static byte [] Int16ToByte2(Short Val) {
byte [] bts = new byte [2];
bts[0] = ( byte ) ((Val >> 8) & 0xff);
bts[1] = ( byte ) (Val & 0xff);
return bts;
}
/**
* @Title: Int16ToByte2
* @Description: TODO(将Int16转化为byte2)
*
* @param i
* @param bts
* @param offset
* @return :void
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static void Int16ToByte2(Short i, byte [] bts, int offset) {
byte [] btsTemp = Int16ToByte2(i);
int index = 0;
while (index < 2) {
bts[index + offset] = btsTemp[index];
index += 1;
}
}
/**
* @Title: UIntToByte4
* @Description: TODO(将Uint32转化为byte4)
*
* @param Val
* @return
* @return :byte[]
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static byte [] UIntToByte4(Long Val) {
byte [] bts = new byte [4];
bts[0] = ( byte ) ((0xff000000L & Val) >> 24);
bts[1] = ( byte ) ((0xff0000 & Val) >> 16);
bts[2] = ( byte ) ((0xff00 & Val) >> 8);
bts[3] = ( byte ) (0xff & Val);
return bts;
}
/**
* @Title: UIntToByte4
* @Description: TODO(将Uint32转化为byte4)
*
* @param i
* @param bts
* @param offset
* @return :void
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static void UIntToByte4(Long i, byte [] bts, int offset) {
byte [] btsTemp = UIntToByte4(i);
int index = 0;
while (index < 4) {
bts[index + offset] = btsTemp[index];
index += 1;
}
}
/**
* @Title: IntToByte4
* @Description: TODO(将int32转化为byte4)
*
* @param Val
* @return
* @return :byte[]
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static byte [] IntToByte4(Integer Val) {
byte [] bts = new byte [4];
bts[0] = ( byte ) ((0xff000000 & Val) >> 24);
bts[1] = ( byte ) ((0xff0000 & Val) >> 16);
bts[2] = ( byte ) ((0xff00 & Val) >> 8);
bts[3] = ( byte ) (0xff & Val);
return bts;
}
/**
* @Title: IntToByte4
* @Description: TODO(将int32转化为byte4)
*
* @param i
* @param bts
* @param offset
* @return :void
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static void IntToByte4(Integer i, byte [] bts, int offset) {
byte [] btsTemp = IntToByte4(i);
int index = 0;
while (index < 4) {
bts[index + offset] = btsTemp[index];
index += 1;
}
}
/**
* @Title: FloatToByte4
* @Description: TODO(Float转byte4)
*
* @param val
* @return
* @return :byte[]
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static byte [] FloatToByte4( float val) {
return IntToByte4(Float.floatToIntBits(val));
}
/**
* @Title: FloatToByte4
* @Description: TODO(Float转byte4)
*
* @param val
* @param bts
* @param offset
* @return :void
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static void FloatToByte4( float val, byte [] bts, int offset) {
byte [] btsTemp = FloatToByte4(val);
int index = 0;
while (index < 4) {
bts[index + offset] = btsTemp[index];
index += 1;
}
}
/**
* @Title: Byte2ToInt16
* @Description: TODO(Byte2转int16)
*
* @param bt1
* @param bt2
* @return
* @return :short
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static short Byte2ToInt16( byte bt1, byte bt2) {
return ( short ) ((bt1 & 0xff) << 8 | bt2 & 0xff);
}
/**
* @Title: Byte2ToInt16
* @Description: TODO(Byte2转int16)
*
* @param bts
* @param offset
* @return
* @return :short
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static short Byte2ToInt16( byte [] bts, int offset) {
return Byte2ToInt16(bts[offset], bts[offset + 1]);
}
/**
* @Title: Byte2ToUInt16
* @Description: TODO(Byte2转uint16)
*
* @param bt1
* @param bt2
* @return
* @return :Integer
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static Integer Byte2ToUInt16( byte bt1, byte bt2) {
return ( int ) ((bt1 & 0xff) << 8 | bt2 & 0xff);
}
/**
* @Title: Byte2ToUInt16
* @Description: TODO( Byte2转uint16)
*
* @param bts
* @param offset
* @return
* @return :Integer
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static Integer Byte2ToUInt16( byte [] bts, int offset) {
return Byte2ToUInt16(bts[offset], bts[offset + 1]);
}
/**
* @Title: Byte4ToInt32
* @Description: TODO(Byte4转int32)
*
* @param bt1
* @param bt2
* @param bt3
* @param bt4
* @return
* @return :Integer
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static Integer Byte4ToInt32( byte bt1, byte bt2, byte bt3, byte bt4) {
return (bt1 & 0xff) << 24 | (bt2 & 0xff) << 16 | (bt3 & 0xff) << 8
| bt4 & 0xff;
}
/**
* @Title: Byte4ToInt32
* @Description: TODO(Byte4转int32)
*
* @param bts
* @param offset
* @return
* @return :Integer
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static Integer Byte4ToInt32( byte [] bts, int offset) {
return Byte4ToInt32(bts[offset], bts[offset + 1], bts[offset + 2],
bts[offset + 3]);
}
/**
* @Title: Byte4ToUInt32
* @Description: TODO(Byte4转uint32)
*
* @param bt1
* @param bt2
* @param bt3
* @param bt4
* @return
* @return :long
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static long Byte4ToUInt32( byte bt1, byte bt2, byte bt3, byte bt4) {
return ( long ) Byte4ToInt32(bt1, bt2, bt3, bt4);
}
/**
* @Title: Byte4ToUInt32
* @Description: TODO(Byte4转uint32)
*
* @param bts
* @param offset
* @return
* @return :long
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static long Byte4ToUInt32( byte [] bts, int offset) {
return Byte4ToUInt32(bts[offset], bts[offset + 1], bts[offset + 2],
bts[offset + 3]);
}
/**
* @Title: Byte4ToFloat
* @Description: TODO(Byte4转Float)
*
* @param bt1
* @param bt2
* @param bt3
* @param bt4
* @return
* @return :float
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static float Byte4ToFloat( byte bt1, byte bt2, byte bt3, byte bt4) {
return Float.intBitsToFloat(Byte4ToInt32(bt1, bt2, bt3, bt4));
}
/**
* @Title: Byte4ToFloat
* @Description: TODO(Byte4转Float)
*
* @param bts
* @param offset
* @return
* @return :float
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static float Byte4ToFloat( byte [] bts, int offset) {
return Byte4ToFloat(bts[offset], bts[offset + 1], bts[offset + 2],
bts[offset + 3]);
}
/**
* @Title: StringToGBK
* @Description: TODO(字符串转GBK编码)
*
* @param str
* @return
* @throws UnsupportedEncodingException
* @return :byte[]
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static byte [] StringToGBK(String str)
throws UnsupportedEncodingException {
return str.getBytes("GBK");
}
/**
* @Title: FillSGBK
* @Description: TODO(填充GBK编码)
*
* @param str
* @param bts
* @param offset
* @return
* @throws UnsupportedEncodingException
* @return :int
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static int FillSGBK(String str, byte [] bts, int offset)
throws UnsupportedEncodingException {
return FillSGBK(str, bts, offset, 0);
}
/**
* @Title: FillSGBK
* @Description: TODO(填充GBK编码)
*
* @param str
* @param bts
* @param offset
* @param length
* @return
* @throws UnsupportedEncodingException
* @return :int
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static int FillSGBK(String str, byte [] bts, int offset, int length)
throws UnsupportedEncodingException {
int len = 0;
if (str != null ) {
byte [] tmp = StringToGBK(str);
// 填充数据
for ( int i = 0; i < tmp.length; i++) {
bts[offset + i] = tmp[i];
}
len = tmp.length;
}
// 补0
for ( int i = len; i < length; i++) {
bts[offset + i] = 0;
}
return len > length ? len : length;
}
/**
* @Title: GBKToString
* @Description: TODO(GBK编码转字符串)
*
* @param bts
* @return
* @throws UnsupportedEncodingException
* @return :String
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static String GBKToString( byte [] bts)
throws UnsupportedEncodingException {
return GBKToString(bts, 0);
}
/**
* @Title: GBKToString
* @Description: TODO(GBK编码转字符串)
*
* @param bts
* @param offset
* @return
* @throws UnsupportedEncodingException
* @return :String
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static String GBKToString( byte [] bts, int offset)
throws UnsupportedEncodingException {
return SGBKToString(bts, offset, bts.length - offset);
}
/**
* @Title: SGBKToString
* @Description: TODO(GBK编码转字符串(定长字符串))
*
* @param bts
* @param offset
* @param count
* @return
* @throws UnsupportedEncodingException
* @return :String
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static String SGBKToString( byte [] bts, int offset, int count)
throws UnsupportedEncodingException {
return new String(bts, offset, count, "GBK");
}
/**
* @Title: HexStringToBytes
* @Description: TODO(HEX字符串转BYTE数组)
*
* @param hex
* @return
* @return :byte[]
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static byte [] HexStringToBytes(String hex) {
byte [] bts = new byte [hex.length() / 2];
for ( int i = 0; i < bts.length; i++) {
bts[i] = ( byte ) Integer.parseInt(hex.substring(2 * i, 2 * i + 2),
16);
}
return bts;
}
/**
* @Title: BytesToHexString
* @Description: TODO(BYTE数组转HEX字符串)
*
* @param bts
* @return
* @return :String
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static String BytesToHexString( byte [] bts) {
return BytesToHexString(bts, 0, bts.length);
}
/**
* @Title: BytesToHexString
* @Description: TODO(BYTE数组转HEX字符串)
*
* @param bts
* @param offset
* @param count
* @return
* @return :String
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static String BytesToHexString( byte [] bts, int offset, int count) {
StringBuilder sb = new StringBuilder(bts.length * 2);
for ( int i = 0; i < count; i++) {
sb.append(Integer.toHexString(bts[i + offset]));
}
return sb.toString();
}
public static int BoolToByte( boolean bl) {
return bl ? 1 : 0 << 0;
}
}
import java.io.UnsupportedEncodingException;
public class ByteHelper {
/**
* @Title: UInt16ToByte2
* @Description: TODO(将UInt16转化为byte2)
*
* @param Val
* @return
* @return :byte[]
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static byte [] UInt16ToByte2(Integer Val) {
byte [] bts = new byte [2];
bts[0] = ( byte ) ((0xff00 & Val) >> 8);
bts[1] = ( byte ) (0xff & Val);
return bts;
}
/**
* @Title: UInt16ToByte2
* @Description: TODO(将UInt16转化为byte2)
*
* @param i
* @param bts
* @param offset
* @return :void
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static void UInt16ToByte2(Integer i, byte [] bts, int offset) {
byte [] btsTemp = UInt16ToByte2(i);
int index = 0;
while (index < 2) {
bts[index + offset] = btsTemp[index];
index += 1;
}
}
/**
* @Title: Int16ToByte2
* @Description: TODO(将Int16转化为byte2)
*
* @param Val
* @return
* @return :byte[]
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static byte [] Int16ToByte2(Short Val) {
byte [] bts = new byte [2];
bts[0] = ( byte ) ((Val >> 8) & 0xff);
bts[1] = ( byte ) (Val & 0xff);
return bts;
}
/**
* @Title: Int16ToByte2
* @Description: TODO(将Int16转化为byte2)
*
* @param i
* @param bts
* @param offset
* @return :void
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static void Int16ToByte2(Short i, byte [] bts, int offset) {
byte [] btsTemp = Int16ToByte2(i);
int index = 0;
while (index < 2) {
bts[index + offset] = btsTemp[index];
index += 1;
}
}
/**
* @Title: UIntToByte4
* @Description: TODO(将Uint32转化为byte4)
*
* @param Val
* @return
* @return :byte[]
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static byte [] UIntToByte4(Long Val) {
byte [] bts = new byte [4];
bts[0] = ( byte ) ((0xff000000L & Val) >> 24);
bts[1] = ( byte ) ((0xff0000 & Val) >> 16);
bts[2] = ( byte ) ((0xff00 & Val) >> 8);
bts[3] = ( byte ) (0xff & Val);
return bts;
}
/**
* @Title: UIntToByte4
* @Description: TODO(将Uint32转化为byte4)
*
* @param i
* @param bts
* @param offset
* @return :void
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static void UIntToByte4(Long i, byte [] bts, int offset) {
byte [] btsTemp = UIntToByte4(i);
int index = 0;
while (index < 4) {
bts[index + offset] = btsTemp[index];
index += 1;
}
}
/**
* @Title: IntToByte4
* @Description: TODO(将int32转化为byte4)
*
* @param Val
* @return
* @return :byte[]
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static byte [] IntToByte4(Integer Val) {
byte [] bts = new byte [4];
bts[0] = ( byte ) ((0xff000000 & Val) >> 24);
bts[1] = ( byte ) ((0xff0000 & Val) >> 16);
bts[2] = ( byte ) ((0xff00 & Val) >> 8);
bts[3] = ( byte ) (0xff & Val);
return bts;
}
/**
* @Title: IntToByte4
* @Description: TODO(将int32转化为byte4)
*
* @param i
* @param bts
* @param offset
* @return :void
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static void IntToByte4(Integer i, byte [] bts, int offset) {
byte [] btsTemp = IntToByte4(i);
int index = 0;
while (index < 4) {
bts[index + offset] = btsTemp[index];
index += 1;
}
}
/**
* @Title: FloatToByte4
* @Description: TODO(Float转byte4)
*
* @param val
* @return
* @return :byte[]
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static byte [] FloatToByte4( float val) {
return IntToByte4(Float.floatToIntBits(val));
}
/**
* @Title: FloatToByte4
* @Description: TODO(Float转byte4)
*
* @param val
* @param bts
* @param offset
* @return :void
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static void FloatToByte4( float val, byte [] bts, int offset) {
byte [] btsTemp = FloatToByte4(val);
int index = 0;
while (index < 4) {
bts[index + offset] = btsTemp[index];
index += 1;
}
}
/**
* @Title: Byte2ToInt16
* @Description: TODO(Byte2转int16)
*
* @param bt1
* @param bt2
* @return
* @return :short
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static short Byte2ToInt16( byte bt1, byte bt2) {
return ( short ) ((bt1 & 0xff) << 8 | bt2 & 0xff);
}
/**
* @Title: Byte2ToInt16
* @Description: TODO(Byte2转int16)
*
* @param bts
* @param offset
* @return
* @return :short
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static short Byte2ToInt16( byte [] bts, int offset) {
return Byte2ToInt16(bts[offset], bts[offset + 1]);
}
/**
* @Title: Byte2ToUInt16
* @Description: TODO(Byte2转uint16)
*
* @param bt1
* @param bt2
* @return
* @return :Integer
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static Integer Byte2ToUInt16( byte bt1, byte bt2) {
return ( int ) ((bt1 & 0xff) << 8 | bt2 & 0xff);
}
/**
* @Title: Byte2ToUInt16
* @Description: TODO( Byte2转uint16)
*
* @param bts
* @param offset
* @return
* @return :Integer
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static Integer Byte2ToUInt16( byte [] bts, int offset) {
return Byte2ToUInt16(bts[offset], bts[offset + 1]);
}
/**
* @Title: Byte4ToInt32
* @Description: TODO(Byte4转int32)
*
* @param bt1
* @param bt2
* @param bt3
* @param bt4
* @return
* @return :Integer
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static Integer Byte4ToInt32( byte bt1, byte bt2, byte bt3, byte bt4) {
return (bt1 & 0xff) << 24 | (bt2 & 0xff) << 16 | (bt3 & 0xff) << 8
| bt4 & 0xff;
}
/**
* @Title: Byte4ToInt32
* @Description: TODO(Byte4转int32)
*
* @param bts
* @param offset
* @return
* @return :Integer
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static Integer Byte4ToInt32( byte [] bts, int offset) {
return Byte4ToInt32(bts[offset], bts[offset + 1], bts[offset + 2],
bts[offset + 3]);
}
/**
* @Title: Byte4ToUInt32
* @Description: TODO(Byte4转uint32)
*
* @param bt1
* @param bt2
* @param bt3
* @param bt4
* @return
* @return :long
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static long Byte4ToUInt32( byte bt1, byte bt2, byte bt3, byte bt4) {
return ( long ) Byte4ToInt32(bt1, bt2, bt3, bt4);
}
/**
* @Title: Byte4ToUInt32
* @Description: TODO(Byte4转uint32)
*
* @param bts
* @param offset
* @return
* @return :long
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static long Byte4ToUInt32( byte [] bts, int offset) {
return Byte4ToUInt32(bts[offset], bts[offset + 1], bts[offset + 2],
bts[offset + 3]);
}
/**
* @Title: Byte4ToFloat
* @Description: TODO(Byte4转Float)
*
* @param bt1
* @param bt2
* @param bt3
* @param bt4
* @return
* @return :float
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static float Byte4ToFloat( byte bt1, byte bt2, byte bt3, byte bt4) {
return Float.intBitsToFloat(Byte4ToInt32(bt1, bt2, bt3, bt4));
}
/**
* @Title: Byte4ToFloat
* @Description: TODO(Byte4转Float)
*
* @param bts
* @param offset
* @return
* @return :float
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static float Byte4ToFloat( byte [] bts, int offset) {
return Byte4ToFloat(bts[offset], bts[offset + 1], bts[offset + 2],
bts[offset + 3]);
}
/**
* @Title: StringToGBK
* @Description: TODO(字符串转GBK编码)
*
* @param str
* @return
* @throws UnsupportedEncodingException
* @return :byte[]
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static byte [] StringToGBK(String str)
throws UnsupportedEncodingException {
return str.getBytes("GBK");
}
/**
* @Title: FillSGBK
* @Description: TODO(填充GBK编码)
*
* @param str
* @param bts
* @param offset
* @return
* @throws UnsupportedEncodingException
* @return :int
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static int FillSGBK(String str, byte [] bts, int offset)
throws UnsupportedEncodingException {
return FillSGBK(str, bts, offset, 0);
}
/**
* @Title: FillSGBK
* @Description: TODO(填充GBK编码)
*
* @param str
* @param bts
* @param offset
* @param length
* @return
* @throws UnsupportedEncodingException
* @return :int
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static int FillSGBK(String str, byte [] bts, int offset, int length)
throws UnsupportedEncodingException {
int len = 0;
if (str != null ) {
byte [] tmp = StringToGBK(str);
// 填充数据
for ( int i = 0; i < tmp.length; i++) {
bts[offset + i] = tmp[i];
}
len = tmp.length;
}
// 补0
for ( int i = len; i < length; i++) {
bts[offset + i] = 0;
}
return len > length ? len : length;
}
/**
* @Title: GBKToString
* @Description: TODO(GBK编码转字符串)
*
* @param bts
* @return
* @throws UnsupportedEncodingException
* @return :String
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static String GBKToString( byte [] bts)
throws UnsupportedEncodingException {
return GBKToString(bts, 0);
}
/**
* @Title: GBKToString
* @Description: TODO(GBK编码转字符串)
*
* @param bts
* @param offset
* @return
* @throws UnsupportedEncodingException
* @return :String
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static String GBKToString( byte [] bts, int offset)
throws UnsupportedEncodingException {
return SGBKToString(bts, offset, bts.length - offset);
}
/**
* @Title: SGBKToString
* @Description: TODO(GBK编码转字符串(定长字符串))
*
* @param bts
* @param offset
* @param count
* @return
* @throws UnsupportedEncodingException
* @return :String
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static String SGBKToString( byte [] bts, int offset, int count)
throws UnsupportedEncodingException {
return new String(bts, offset, count, "GBK");
}
/**
* @Title: HexStringToBytes
* @Description: TODO(HEX字符串转BYTE数组)
*
* @param hex
* @return
* @return :byte[]
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static byte [] HexStringToBytes(String hex) {
byte [] bts = new byte [hex.length() / 2];
for ( int i = 0; i < bts.length; i++) {
bts[i] = ( byte ) Integer.parseInt(hex.substring(2 * i, 2 * i + 2),
16);
}
return bts;
}
/**
* @Title: BytesToHexString
* @Description: TODO(BYTE数组转HEX字符串)
*
* @param bts
* @return
* @return :String
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static String BytesToHexString( byte [] bts) {
return BytesToHexString(bts, 0, bts.length);
}
/**
* @Title: BytesToHexString
* @Description: TODO(BYTE数组转HEX字符串)
*
* @param bts
* @param offset
* @param count
* @return
* @return :String
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-8
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-8 wanjj v1.0.0 修改原因
*/
public static String BytesToHexString( byte [] bts, int offset, int count) {
StringBuilder sb = new StringBuilder(bts.length * 2);
for ( int i = 0; i < count; i++) {
sb.append(Integer.toHexString(bts[i + offset]));
}
return sb.toString();
}
public static int BoolToByte( boolean bl) {
return bl ? 1 : 0 << 0;
}
}
package com.van.base;
import java.io.UnsupportedEncodingException;
import android.text.format.Time;
public class BCDHelper {
/**
* @Title: StrToBCD
* @Description: TODO(用BCD码压缩数字字符串)
*
* @param str
* @return
* @return :byte[]
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static byte [] StrToBCD(String str) {
return StrToBCD(str, str.length());
}
public static byte [] StrToBCD(String str, int numlen) {
if (numlen % 2 != 0)
numlen++;
while (str.length() < numlen) {
str = "0" + str;
}
byte [] bStr = new byte [str.length() / 2];
char [] cs = str.toCharArray();
int i = 0;
int iNum = 0;
for (i = 0; i < cs.length; i += 2) {
int iTemp = 0;
if (cs[i] >= '0' && cs[i] <= '9') {
iTemp = (cs[i] - '0') << 4;
} else {
// 判断是否为a~f
if (cs[i] >= 'a' && cs[i] <= 'f') {
cs[i] -= 32;
}
iTemp = (cs[i] - '0' - 7) << 4;
}
// 处理低位
if (cs[i + 1] >= '0' && cs[i + 1] <= '9') {
iTemp += cs[i + 1] - '0';
} else {
// 判断是否为a~f
if (cs[i + 1] >= 'a' && cs[i + 1] <= 'f') {
cs[i + 1] -= 32;
}
iTemp += cs[i + 1] - '0' - 7;
}
bStr[iNum] = ( byte ) iTemp;
iNum++;
}
return bStr;
}
/**
* @Title: bcdToInt
* @Description: TODO(BCD转int)
*
* @param bcdNum
* @param offset
* @param numlen
* @return
* @return :int
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static int bcdToInt( byte [] bcdNum, int offset, int numlen) {
return Integer.parseInt(bcdToString(bcdNum, offset, numlen));
}
/**
* @Title: bcdToString
* @Description: TODO(BCD转字符串)
*
* @param bcdNum
* @param offset
* @param numlen
* @return
* @return :String
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static String bcdToString( byte [] bcdNum, int offset, int numlen) {
int len = numlen / 2;
if (numlen % 2 != 0)
len++;
StringBuffer sb = new StringBuffer();
for ( int i = 0; i < len; i++) {
sb.append(Integer.toHexString((bcdNum[i + offset] & 0xf0) >> 4));
sb.append(Integer.toHexString(bcdNum[i + offset] & 0xf));
}
return sb.toString();
}
/**
* @Title: Bcd3ToDateTime
* @Description: TODO(BCD码转日期)
*
* @param data
* @param offset
* @return
* @return :Time
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static Time Bcd3ToDateTime( byte [] data, int offset) {
int year = 0, month = 0, monthDay = 0;
year = Integer.parseInt("20" + bcdToString(data, offset, 2));
month = bcdToInt(data, offset + 1, 2);
monthDay = bcdToInt(data, offset + 2, 2);
Time time = new Time("GMT+8");
time.set(monthDay, month, year);
return time;
}
public static Time Bcd5ToDateTime( byte [] data, int offset) {
int year = 0, month = 0, monthDay = 0, hour = 0, minute = 0, second = 0;
year = Integer.parseInt("20" + bcdToString(data, offset, 2));
month = bcdToInt(data, offset + 1, 2);
monthDay = bcdToInt(data, offset + 2, 2);
hour = bcdToInt(data, offset + 3, 2);
minute = bcdToInt(data, offset + 4, 2);
Time time = new Time("GMT+8");
time.set(second, minute, hour, monthDay, month, year);
return time;
}
/**
* @Title: Bcd6ToDateTime
* @Description: TODO(BCD码转时间格式)
*
* @param data
* @param offset
* @return
* @return :Time
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static Time Bcd6ToDateTime( byte [] data, int offset) {
int year = 0, month = 0, monthDay = 0, hour = 0, minute = 0, second = 0;
year = Integer.parseInt("20" + bcdToString(data, offset, 2));
month = bcdToInt(data, offset + 1, 2);
monthDay = bcdToInt(data, offset + 2, 2);
hour = bcdToInt(data, offset + 3, 2);
minute = bcdToInt(data, offset + 4, 2);
second = bcdToInt(data, offset + 5, 2);
Time time = new Time("GMT+8");
time.set(second, minute, hour, monthDay, month, year);
return time;
}
public static Time Bcd7ToDateTime( byte [] data, int offset) {
int year = 0, month = 0, monthDay = 0, hour = 0, minute = 0, second = 0;
year = bcdToInt(data, offset, 4);
month = bcdToInt(data, offset + 2, 2);
monthDay = bcdToInt(data, offset + 3, 2);
hour = bcdToInt(data, offset + 4, 2);
minute = bcdToInt(data, offset + 5, 2);
second = bcdToInt(data, offset + 6, 2);
Time time = new Time("GMT+8");
time.set(second, minute, hour, monthDay, month, year);
return time;
}
/**
* @Title: DateTimeToBcd3
* @Description: TODO(日期转BCD码)
*
* @param dt
* @return
* @throws UnsupportedEncodingException
* @return :byte[]
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static byte [] DateTimeToBcd3(Time dt)
throws UnsupportedEncodingException {
StringBuilder sb = new StringBuilder();
sb.append(FStrLen(String.valueOf((dt.year - 2000)), 2));
sb.append(FStrLen(String.valueOf((dt.month)), 2));
sb.append(FStrLen(String.valueOf((dt.monthDay)), 2));
return StrToBCD(sb.toString());
}
public static byte [] DateTimeToBcd5(Time dt)
throws UnsupportedEncodingException {
StringBuilder sb = new StringBuilder();
sb.append(FStrLen(String.valueOf((dt.year - 2000)), 2));
sb.append(FStrLen(String.valueOf(dt.month), 2));
sb.append(FStrLen(String.valueOf(dt.monthDay), 2));
sb.append(FStrLen(String.valueOf(dt.hour), 2));
sb.append(FStrLen(String.valueOf(dt.minute), 2));
return StrToBCD(sb.toString());
}
public static byte [] DateTimeToBcd6(Time dt)
throws UnsupportedEncodingException {
StringBuilder sb = new StringBuilder();
sb.append(FStrLen(String.valueOf((dt.year - 2000)), 2));
sb.append(FStrLen(String.valueOf(dt.month), 2));
sb.append(FStrLen(String.valueOf(dt.monthDay), 2));
sb.append(FStrLen(String.valueOf(dt.hour), 2));
sb.append(FStrLen(String.valueOf(dt.minute), 2));
sb.append(FStrLen(String.valueOf(dt.second), 2));
return StrToBCD(sb.toString());
}
public static byte [] DateTimeToBcd7(Time dt)
throws UnsupportedEncodingException {
StringBuilder sb = new StringBuilder();
sb.append(FStrLen(String.valueOf(dt.year), 4));
sb.append(FStrLen(String.valueOf(dt.month), 2));
sb.append(FStrLen(String.valueOf(dt.monthDay), 2));
sb.append(FStrLen(String.valueOf(dt.hour), 2));
sb.append(FStrLen(String.valueOf(dt.minute), 2));
sb.append(FStrLen(String.valueOf(dt.second), 2));
return StrToBCD(sb.toString());
}
public static String FStrLen(String str, int len) {
if (str.length() < len) {
str = "0" + str;
}
return str;
}
/**
* @Title: GetNowTime
* @Description: TODO(获取当前GMT+8时间)
*
* @return
* @return :Time
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-9
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-9 wanjj v1.0.0 修改原因
*/
public static Time GetNowTime() {
Time t = GetNewTime();
t.setToNow();
return t;
}
public static Time GetNewTime() {
return new Time("GMT+8");
}
/**
* @Title: TimeDiff
* @Description: TODO(计算两个时间相差毫秒数)
*
* @param tm1
* @param tm2
* @return
* @return :long
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-11
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-11 wanjj v1.0.0 修改原因
*/
public static long TimeDiff(Time tm1, Time tm2) {
return (tm1.toMillis( true ) - tm2.toMillis( true ));
}
}
import java.io.UnsupportedEncodingException;
import android.text.format.Time;
public class BCDHelper {
/**
* @Title: StrToBCD
* @Description: TODO(用BCD码压缩数字字符串)
*
* @param str
* @return
* @return :byte[]
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static byte [] StrToBCD(String str) {
return StrToBCD(str, str.length());
}
public static byte [] StrToBCD(String str, int numlen) {
if (numlen % 2 != 0)
numlen++;
while (str.length() < numlen) {
str = "0" + str;
}
byte [] bStr = new byte [str.length() / 2];
char [] cs = str.toCharArray();
int i = 0;
int iNum = 0;
for (i = 0; i < cs.length; i += 2) {
int iTemp = 0;
if (cs[i] >= '0' && cs[i] <= '9') {
iTemp = (cs[i] - '0') << 4;
} else {
// 判断是否为a~f
if (cs[i] >= 'a' && cs[i] <= 'f') {
cs[i] -= 32;
}
iTemp = (cs[i] - '0' - 7) << 4;
}
// 处理低位
if (cs[i + 1] >= '0' && cs[i + 1] <= '9') {
iTemp += cs[i + 1] - '0';
} else {
// 判断是否为a~f
if (cs[i + 1] >= 'a' && cs[i + 1] <= 'f') {
cs[i + 1] -= 32;
}
iTemp += cs[i + 1] - '0' - 7;
}
bStr[iNum] = ( byte ) iTemp;
iNum++;
}
return bStr;
}
/**
* @Title: bcdToInt
* @Description: TODO(BCD转int)
*
* @param bcdNum
* @param offset
* @param numlen
* @return
* @return :int
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static int bcdToInt( byte [] bcdNum, int offset, int numlen) {
return Integer.parseInt(bcdToString(bcdNum, offset, numlen));
}
/**
* @Title: bcdToString
* @Description: TODO(BCD转字符串)
*
* @param bcdNum
* @param offset
* @param numlen
* @return
* @return :String
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static String bcdToString( byte [] bcdNum, int offset, int numlen) {
int len = numlen / 2;
if (numlen % 2 != 0)
len++;
StringBuffer sb = new StringBuffer();
for ( int i = 0; i < len; i++) {
sb.append(Integer.toHexString((bcdNum[i + offset] & 0xf0) >> 4));
sb.append(Integer.toHexString(bcdNum[i + offset] & 0xf));
}
return sb.toString();
}
/**
* @Title: Bcd3ToDateTime
* @Description: TODO(BCD码转日期)
*
* @param data
* @param offset
* @return
* @return :Time
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static Time Bcd3ToDateTime( byte [] data, int offset) {
int year = 0, month = 0, monthDay = 0;
year = Integer.parseInt("20" + bcdToString(data, offset, 2));
month = bcdToInt(data, offset + 1, 2);
monthDay = bcdToInt(data, offset + 2, 2);
Time time = new Time("GMT+8");
time.set(monthDay, month, year);
return time;
}
public static Time Bcd5ToDateTime( byte [] data, int offset) {
int year = 0, month = 0, monthDay = 0, hour = 0, minute = 0, second = 0;
year = Integer.parseInt("20" + bcdToString(data, offset, 2));
month = bcdToInt(data, offset + 1, 2);
monthDay = bcdToInt(data, offset + 2, 2);
hour = bcdToInt(data, offset + 3, 2);
minute = bcdToInt(data, offset + 4, 2);
Time time = new Time("GMT+8");
time.set(second, minute, hour, monthDay, month, year);
return time;
}
/**
* @Title: Bcd6ToDateTime
* @Description: TODO(BCD码转时间格式)
*
* @param data
* @param offset
* @return
* @return :Time
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static Time Bcd6ToDateTime( byte [] data, int offset) {
int year = 0, month = 0, monthDay = 0, hour = 0, minute = 0, second = 0;
year = Integer.parseInt("20" + bcdToString(data, offset, 2));
month = bcdToInt(data, offset + 1, 2);
monthDay = bcdToInt(data, offset + 2, 2);
hour = bcdToInt(data, offset + 3, 2);
minute = bcdToInt(data, offset + 4, 2);
second = bcdToInt(data, offset + 5, 2);
Time time = new Time("GMT+8");
time.set(second, minute, hour, monthDay, month, year);
return time;
}
public static Time Bcd7ToDateTime( byte [] data, int offset) {
int year = 0, month = 0, monthDay = 0, hour = 0, minute = 0, second = 0;
year = bcdToInt(data, offset, 4);
month = bcdToInt(data, offset + 2, 2);
monthDay = bcdToInt(data, offset + 3, 2);
hour = bcdToInt(data, offset + 4, 2);
minute = bcdToInt(data, offset + 5, 2);
second = bcdToInt(data, offset + 6, 2);
Time time = new Time("GMT+8");
time.set(second, minute, hour, monthDay, month, year);
return time;
}
/**
* @Title: DateTimeToBcd3
* @Description: TODO(日期转BCD码)
*
* @param dt
* @return
* @throws UnsupportedEncodingException
* @return :byte[]
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-17
*
* Modification History:
* Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-17 wanjj v1.0.0 修改原因
*/
public static byte [] DateTimeToBcd3(Time dt)
throws UnsupportedEncodingException {
StringBuilder sb = new StringBuilder();
sb.append(FStrLen(String.valueOf((dt.year - 2000)), 2));
sb.append(FStrLen(String.valueOf((dt.month)), 2));
sb.append(FStrLen(String.valueOf((dt.monthDay)), 2));
return StrToBCD(sb.toString());
}
public static byte [] DateTimeToBcd5(Time dt)
throws UnsupportedEncodingException {
StringBuilder sb = new StringBuilder();
sb.append(FStrLen(String.valueOf((dt.year - 2000)), 2));
sb.append(FStrLen(String.valueOf(dt.month), 2));
sb.append(FStrLen(String.valueOf(dt.monthDay), 2));
sb.append(FStrLen(String.valueOf(dt.hour), 2));
sb.append(FStrLen(String.valueOf(dt.minute), 2));
return StrToBCD(sb.toString());
}
public static byte [] DateTimeToBcd6(Time dt)
throws UnsupportedEncodingException {
StringBuilder sb = new StringBuilder();
sb.append(FStrLen(String.valueOf((dt.year - 2000)), 2));
sb.append(FStrLen(String.valueOf(dt.month), 2));
sb.append(FStrLen(String.valueOf(dt.monthDay), 2));
sb.append(FStrLen(String.valueOf(dt.hour), 2));
sb.append(FStrLen(String.valueOf(dt.minute), 2));
sb.append(FStrLen(String.valueOf(dt.second), 2));
return StrToBCD(sb.toString());
}
public static byte [] DateTimeToBcd7(Time dt)
throws UnsupportedEncodingException {
StringBuilder sb = new StringBuilder();
sb.append(FStrLen(String.valueOf(dt.year), 4));
sb.append(FStrLen(String.valueOf(dt.month), 2));
sb.append(FStrLen(String.valueOf(dt.monthDay), 2));
sb.append(FStrLen(String.valueOf(dt.hour), 2));
sb.append(FStrLen(String.valueOf(dt.minute), 2));
sb.append(FStrLen(String.valueOf(dt.second), 2));
return StrToBCD(sb.toString());
}
public static String FStrLen(String str, int len) {
if (str.length() < len) {
str = "0" + str;
}
return str;
}
/**
* @Title: GetNowTime
* @Description: TODO(获取当前GMT+8时间)
*
* @return
* @return :Time
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-9
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-9 wanjj v1.0.0 修改原因
*/
public static Time GetNowTime() {
Time t = GetNewTime();
t.setToNow();
return t;
}
public static Time GetNewTime() {
return new Time("GMT+8");
}
/**
* @Title: TimeDiff
* @Description: TODO(计算两个时间相差毫秒数)
*
* @param tm1
* @param tm2
* @return
* @return :long
*
* @version : v1.0.0
* @author : WANJJ
* @date: 2011-11-11
*
* Modification History: Date Author Version Description
* ---------------------------------------------------------*
* 2011-11-11 wanjj v1.0.0 修改原因
*/
public static long TimeDiff(Time tm1, Time tm2) {
return (tm1.toMillis( true ) - tm2.toMillis( true ));
}
}
CheckHelper
package com.van.base;
import java.util.ArrayList;
/**
* 用户可以直接调用类里面的两个静态方法
*
* @author WANJJ
*
*/
public class CheckHelper {
/**
* 得出CRC计算结果
*
* @param buf
* 要计算CRC的字符串
* @return 整数
*/
public static int getCRC(String buf) {
int crc = 0xFFFF; // initial value
int polynomial = 0x1021; // 0001 0000 0010 0001 (0, 5, 12)
for ( int j = 0; j < buf.length(); j++) {
char b = buf.charAt(j);
for ( int i = 0; i < 8; i++) {
boolean bit = ((b >> (7 - i) & 1) == 1);
boolean c15 = ((crc >> 15 & 1) == 1);
crc <<= 1;
if (c15 ^ bit)
crc ^= polynomial;
}
}
crc &= 0xffff;
return crc;
}
/**
* 得出CRC计算结果
*
* @param buf
* 要计算CRC的字符串
* @return 字符串,2个字节
*/
public static String getCRCString(String buf) {
int crc = 0xFFFF; // initial value
int polynomial = 0x1021; // 0001 0000 0010 0001 (0, 5, 12)
for ( int j = 0; j < buf.length(); j++) {
char b = buf.charAt(j);
for ( int i = 0; i < 8; i++) {
boolean bit = ((b >> (7 - i) & 1) == 1);
boolean c15 = ((crc >> 15 & 1) == 1);
crc <<= 1;
if (c15 ^ bit)
crc ^= polynomial;
}
}
crc &= 0xffff;
String str = "" + ( char ) (crc / 256) + ( char ) (crc % 256);
return str;
}
/**
* 得出异或计算结果
*
* @param data
* 要计算异或的数据
* @param offset
* 偏移位
* @param length
* 长度
* @return byte
*/
public static byte CheckXOR( byte [] data, int offset, int length) {
byte xda = 0;
for ( int i = 0; i < length; i++) {
xda = ( byte ) ((data[i + offset] ^ xda) & 0xFF);
}
return xda;
}
/**
* 校验并转义(异或效验)
*
* @param data
* 要计算异或的数据
* @param offset
* 偏移位
* @param length
* 长度
* @return byte
*/
public static void XORAndEscape(ArrayList<Byte> data, int offset, int length) {
byte xda = 0;
for ( int i = offset; i < offset + length; i++) {
xda = ( byte ) (data.get(i) ^ xda);
if (data.get(i) == 0x7e) // 转义 向后插入一个0x02
{
data.set(i, ( byte ) 0x7d);
data.add(i + 1, ( byte ) 0x02);
length++;
i++;
} else if (data.get(i) == 0x7d) // 转义 向后插入一个0x01
{
data.add(i + 1, ( byte ) 0x01);
length++;
i++;
}
}
data.add(offset + length, xda);
if (xda == 0x7e) // 转义 向后插入一个0x02
data.add(offset + length + 1, ( byte ) 0x02);
else if (xda == 0x7d) // 转义 向后插入一个0x01
data.add(offset + length + 1, ( byte ) 0x01);
}
}
import java.util.ArrayList;
/**
* 用户可以直接调用类里面的两个静态方法
*
* @author WANJJ
*
*/
public class CheckHelper {
/**
* 得出CRC计算结果
*
* @param buf
* 要计算CRC的字符串
* @return 整数
*/
public static int getCRC(String buf) {
int crc = 0xFFFF; // initial value
int polynomial = 0x1021; // 0001 0000 0010 0001 (0, 5, 12)
for ( int j = 0; j < buf.length(); j++) {
char b = buf.charAt(j);
for ( int i = 0; i < 8; i++) {
boolean bit = ((b >> (7 - i) & 1) == 1);
boolean c15 = ((crc >> 15 & 1) == 1);
crc <<= 1;
if (c15 ^ bit)
crc ^= polynomial;
}
}
crc &= 0xffff;
return crc;
}
/**
* 得出CRC计算结果
*
* @param buf
* 要计算CRC的字符串
* @return 字符串,2个字节
*/
public static String getCRCString(String buf) {
int crc = 0xFFFF; // initial value
int polynomial = 0x1021; // 0001 0000 0010 0001 (0, 5, 12)
for ( int j = 0; j < buf.length(); j++) {
char b = buf.charAt(j);
for ( int i = 0; i < 8; i++) {
boolean bit = ((b >> (7 - i) & 1) == 1);
boolean c15 = ((crc >> 15 & 1) == 1);
crc <<= 1;
if (c15 ^ bit)
crc ^= polynomial;
}
}
crc &= 0xffff;
String str = "" + ( char ) (crc / 256) + ( char ) (crc % 256);
return str;
}
/**
* 得出异或计算结果
*
* @param data
* 要计算异或的数据
* @param offset
* 偏移位
* @param length
* 长度
* @return byte
*/
public static byte CheckXOR( byte [] data, int offset, int length) {
byte xda = 0;
for ( int i = 0; i < length; i++) {
xda = ( byte ) ((data[i + offset] ^ xda) & 0xFF);
}
return xda;
}
/**
* 校验并转义(异或效验)
*
* @param data
* 要计算异或的数据
* @param offset
* 偏移位
* @param length
* 长度
* @return byte
*/
public static void XORAndEscape(ArrayList<Byte> data, int offset, int length) {
byte xda = 0;
for ( int i = offset; i < offset + length; i++) {
xda = ( byte ) (data.get(i) ^ xda);
if (data.get(i) == 0x7e) // 转义 向后插入一个0x02
{
data.set(i, ( byte ) 0x7d);
data.add(i + 1, ( byte ) 0x02);
length++;
i++;
} else if (data.get(i) == 0x7d) // 转义 向后插入一个0x01
{
data.add(i + 1, ( byte ) 0x01);
length++;
i++;
}
}
data.add(offset + length, xda);
if (xda == 0x7e) // 转义 向后插入一个0x02
data.add(offset + length + 1, ( byte ) 0x02);
else if (xda == 0x7d) // 转义 向后插入一个0x01
data.add(offset + length + 1, ( byte ) 0x01);
}
}