package Test0703;
/**
* @author benjaminwan
*数据转换工具
*/
public class MyFunc {
/**
* 将整型数字转换为二进制字符串,不舍弃前面的0
* @param number 整型数字
* @param bits 位数
* @return 二进制字符串
*/
public static String getSimpleBinString(int number,int bits){
StringBuilder sBuilder = new StringBuilder();for(int i =0; i < bits; i++){
sBuilder.append(number &1);
number = number >>>1;}return sBuilder.reverse().toString();}
//-------------------------------------------------------
// 判断奇数或偶数,位运算,最后一位是1则为奇数,为0是偶数
static public int isOdd(int num){return num & 0x1;}
//-------------------------------------------------------
static public int HexToInt(String inHex)//Hex字符串转int
{return Integer.parseInt(inHex, 16);}
//-------------------------------------------------------
static public byte HexToByte(String inHex)//Hex字符串转byte
{return(byte)Integer.parseInt(inHex,16);}
//-------------------------------------------------------
static public String Byte2Hex(Byte inByte)//1字节转2个Hex字符
{return String.format("%02X", inByte).toUpperCase();}
//-------------------------------------------------------
//十进制转十六进制
static public String ByteArrToHex(byte[] inBytArr)//字节数组转转hex字符串
{
StringBuilder strBuilder=new StringBuilder();
int j=inBytArr.length;for(int i =0; i < j; i++){
strBuilder.append(Byte2Hex(inBytArr[i]));
strBuilder.append(" ");}return strBuilder.toString();}
//-------------------------------------------------------
static public String ByteArrToHex(byte[] inBytArr,int offset,int byteCount)//字节数组转转hex字符串,可选长度
{
StringBuilder strBuilder=new StringBuilder();
int j=byteCount;for(int i = offset; i < j; i++){
strBuilder.append(Byte2Hex(inBytArr[i]));}return strBuilder.toString();}
//-------------------------------------------------------
//转hex字符串转字节数组
//十六进制转成十进制
static public byte[] HexToByteArr(String inHex)//hex字符串转字节数组
{
int hexlen = inHex.length();
byte[] result;if(isOdd(hexlen)==1){//奇数
hexlen++;
result = new byte[(hexlen/2)];inHex="0"+inHex;}else {//偶数
result = new byte[(hexlen/2)];}
int j=0;for(int i =0; i < hexlen;i+=2){
result[j]=HexToByte(inHex.substring(i,i+2));
j++;}return result;}
//十六进制相加校验
public static String makeChecksum(String data){if(data == null || data.equals("")){return"";}
int total =0;
int len = data.length();
int num =0;while(num < len){
String s = data.substring(num, num + 2);
System.out.println(s);
total += Integer.parseInt(s, 16);
num = num + 2;}
/**
* 用256求余最大是255,即16进制的FF
*/
int mod = total % 256 +1;
String hex = Integer.toHexString(mod);
len = hex.length();
// 如果不够校验位的长度,补0,这里用的是两位校验
if(len <2){
hex ="0" + hex;}return hex;}
//二进制转换成十进制
public static Integer Biannary2Decimal(int bi){
String binStr = bi+"";
Integer sum=0;
int len = binStr.length();for(int i=1;i<=len;i++){
//第i位 的数字为:
int dt = Integer.parseInt(binStr.substring(i-1,i));sum+=(int)Math.pow(2,len-i)*dt;}returnsum;}
//十进制转换成二进制
public static String Decimal2Binary(int de){
String numstr ="";while(de>0){
int res = de%2; //除2 取余数作为二进制数
numstr = res + numstr;
de = de/2;}return numstr;}}