各数据类型的转换(十进制转二进制,二进制转十进制)

/**
 * 2015-6-17
 * DataUtils.java
 * author:liujia
 */
package com.fastech.monitor_controller.utils;


import org.apache.log4j.Logger;

import java.math.BigDecimal;
import java.util.ArrayList;


/**
 * @author mnn
 */
public class DataUtils {
    
    private static Logger utilLog = Logger.getLogger(DataUtils.class);
    // iops,吞吐量保留小数点后两位,命中率保留小数点后4位,根据digit乘
    public static long convert(double value, int digit) {
        long l1 = Math.round(value * digit); // 四舍五入
        return l1;
    }
    /**
     * 格式化version 暂支持四阶以内的8位整数的version   如6.6.6.6
     * @author mystox
     * @param version
     * @return
     * long
     */
    static public long formatVersion(String version) {
        long result = 0l;
        String[] versionArr = version.split("\\.");
        for (int i = 0; i < versionArr.length; i++) {//拼接version
            long versionIndex = Long.parseLong(versionArr[i]);
            if (versionIndex > 255) {
                versionIndex = 255;
            }
            result += versionIndex << (40 - i * 8);
        }
        return result;
    }
    /**
     * 格式化rwx文件权限
     * r:read就是读权限 --数字4表示
     * w:write就是写权限 --数字2表示
     * x:excute就是执行权限 --数字1表示
     *
     * */
    static public int formatRWX(String rwx) {
        int result=0;
        String varString="";
        int d=0;
        rwx=rwx.toLowerCase();
        ArrayList var1=new ArrayList<>();
        for(int x=0; x<rwx.length();x++){
            var1.add(x, rwx.substring(0, 3));
            int b=0;
            int c=0;
            for(int j=0;j<var1.get(x).toString().length();j++){
                char code=var1.get(x).toString().charAt(j);
                int a=0;
                if(code=='r'){
                    a=4;
                }else if(code=='w'){
                    a=2;
                }else if(code=='x'){
                    a=1;
                }else if(x==0&&j==2&&code=='s'){
                    c=4;
                }else if(x==1&&j==2&&code=='s'){
                    c=2;
                }else if(x==2&&j==2&&code=='t'){
                    c=1;
                }else{
                    a=0;
                }
                b=b+a;
                
            }
            varString=varString+b;
            d=d+c;
            rwx=rwx.substring(3);
            
        }
        if(d==0){
            result=Integer.parseInt(varString);
        }else{
            result=Integer.parseInt(d+varString);
        }
        
        return result;
    }
    static public String intToRWX(String rwx) {
        String result="";
        String var="";
        if(rwx.length()==3){
            for(int j=0;j<rwx.length();j++){
                char code=rwx.charAt(j);
                if(code=='7'){
                    var="rwx";
                }else if(code=='6'){
                    var="rw-";
                }else if(code=='5'){
                    var="r-x";
                }else if(code=='4'){
                    var="r--";
                }else if(code=='3'){
                    var="-wx";
                }else if(code=='2'){
                    var="-w-";
                }else if(code=='1'){
                    var="--x";
                }else if(code=='0'){
                    var="---";
                }
                result=result+var;
            }
        }else if(rwx.length()==4){
            for(int j=1;j<rwx.length();j++){
                char code=rwx.charAt(j);
                if(code=='7'){
                    var="rwx";
                }else if(code=='6'){
                    if(j==1){
                        if(rwx.charAt(0)=='7'||rwx.charAt(0)=='6'||rwx.charAt(0)=='5'||rwx.charAt(0)=='4'){
                            var="rws";
                        }else{
                            var="rw-";
                        }
                    }else if(j==2){
                        if(rwx.charAt(0)=='7'||rwx.charAt(0)=='6'||rwx.charAt(0)=='3'||rwx.charAt(0)=='2'){
                            var="rws";
                        }else{
                            var="rw-";
                        }
                    }else if(j==3){
                        if(rwx.charAt(0)=='7'||rwx.charAt(0)=='5'||rwx.charAt(0)=='3'||rwx.charAt(0)=='1'){
                            var="rwt";
                        }else{
                            var="rw-";
                        }
                    }
                    
                    
                }else if(code=='5'){
                    var="r-x";
                }else if(code=='4'){
                    if(j==1){
                        if(rwx.charAt(0)=='7'||rwx.charAt(0)=='6'||rwx.charAt(0)=='5'||rwx.charAt(0)=='4'){
                            var="r-s";
                        }else{
                            var="r--";
                        }
                    }else if(j==2){
                        if(rwx.charAt(0)=='7'||rwx.charAt(0)=='6'||rwx.charAt(0)=='3'||rwx.charAt(0)=='2'){
                            var="r-s";
                        }else{
                            var="r--";
                        }
                    }else if(j==3){
                        if(rwx.charAt(0)=='7'||rwx.charAt(0)=='5'||rwx.charAt(0)=='3'||rwx.charAt(0)=='1'){
                            var="r-t";
                        }else{
                            var="r--";
                        }
                    }
                }else if(code=='3'){
                    var="-wx";
                }else if(code=='2'){
                    if(j==1){
                        if(rwx.charAt(0)=='7'||rwx.charAt(0)=='6'||rwx.charAt(0)=='5'||rwx.charAt(0)=='4'){
                            var="-ws";
                        }else{
                            var="-w-";
                        }
                    }else if(j==2){
                        if(rwx.charAt(0)=='7'||rwx.charAt(0)=='6'||rwx.charAt(0)=='3'||rwx.charAt(0)=='2'){
                            var="-ws";
                        }else{
                            var="-w-";
                        }
                    }else if(j==3){
                        if(rwx.charAt(0)=='7'||rwx.charAt(0)=='5'||rwx.charAt(0)=='3'||rwx.charAt(0)=='1'){
                            var="-wt";
                        }else{
                            var="-w-";
                        }
                    }
                    
                }else if(code=='1'){
                    var="--x";
                }else if(code=='0'){
                    if(j==1){
                        if(rwx.charAt(0)=='7'||rwx.charAt(0)=='6'||rwx.charAt(0)=='5'||rwx.charAt(0)=='4'){
                            var="--s";
                        }else{
                            var="---";
                        }
                    }else if(j==2){
                        if(rwx.charAt(0)=='7'||rwx.charAt(0)=='6'||rwx.charAt(0)=='3'||rwx.charAt(0)=='2'){
                            var="--s";
                        }else{
                            var="---";
                        }
                    }else if(j==3){
                        if(rwx.charAt(0)=='7'||rwx.charAt(0)=='5'||rwx.charAt(0)=='3'||rwx.charAt(0)=='1'){
                            var="--t";
                        }else{
                            var="---";
                        }
                    }
                    
                }
                result=result+var;
            }
        }
        
        
        return result;
    }
    /**
     * 格式化拼接环境参数, 结果为环境编码
     * @author mnn
     * @param scope
     * @param appno
     * @param version
     * @return
     * long
     */
    static public long formatEvo(long scope, long appno, String version) {
        long result = 0l;
        result += scope << 61;
        result += appno << 48;
        result += formatVersion(version);
        return result;
    }
    /**
     * 该算法实现 根据二进制位置取 64位 Long型数据,起始位置index为0,规则遵循“含头含尾”
     *             如 0000000000000000000000000000011111000000000000000000000000000000
     *                 取出11111  start 29 end 33
     * @author mystox
     * @param value
     * @param start
     * @param end
     * @return
     * Long
     */
    static public long displacement(long value, int start, int end) {
        ////// 根据end位右移消尾  ***************  根据截取长度 做2^(end - start + 1)运算
        return value >> (Long.SIZE - end - 1) & (1l << (end - start + 1)) - 1;
        
    }
    
    /**
     * 十进制转二进制数位数 并 左移 位数
     * <p><b>功能描述和使用场景:</b></p>
     * <p><b>实现流程:</b></p>
     *      <br/>
     * @param num 传入十进制参数
     * @param digit 左移位数
     * @return
     * String
     */
    public static String decimal2Binary(long num, int digit) {
        String str = "";
        if (num != 0) {
            str = Long.toBinaryString(num);
        }
        if (str.length() < digit) {
            String fill = "";
            for (int i = 0; i < digit - str.length(); i++) {
                fill += "0";
            }
            str = str + fill;
        } else {
            str = "";
            for (int i = 0; i < digit-1; i++) {
                str += "1";
            }
            str = str + "0";
        }
        return str;
    }
    
    public String tenTotwo1(long num, int digit) {
        String str = "";
        if (num != 0) {
            str = Long.toBinaryString(num);
        }
        if (str.length() <=digit) {
            String fill = "";
            for (int i = 0; i < digit - str.length(); i++) {
                fill += "0";
            }
            str = fill + str;
        } else {
            str = "";
            for (int i = 0; i < digit; i++) {
                str += "1";
            }
        }
        return str;
    }
    // 二进制转十进制数
    public static long twoToten(String twoNum) {
        long l = 0;
        if (twoNum != null && twoNum.trim().length() > 0){
            l = Long.valueOf(twoNum, 2);
        }
        return l;
    }
    public static String danWeiZhuanHua(String twoNum) {
        
        String resurs="";
        if(twoNum.contains("K") ||twoNum.contains("k")){
            BigDecimal b1 = new BigDecimal(twoNum.replaceAll("[Bb|Kk|Mm|Gg|Tt|Pp]", "").trim());   
            BigDecimal b2 = new BigDecimal(1024);   
            
            return b1.multiply(b2).toString();
        }else if(twoNum.contains("M") ||twoNum.contains("m")){
            BigDecimal b1 = new BigDecimal(twoNum.replaceAll("[Bb|Kk|Mm|Gg|Tt|Pp]", "").trim());   
            BigDecimal b2 = new BigDecimal(1024);   
            BigDecimal bd2=b2.pow(2);
            return b1.multiply(bd2).toString();
        
        }else if(twoNum.contains("G") ||twoNum.contains("g")){
            BigDecimal b1 = new BigDecimal(twoNum.replaceAll("[Bb|Kk|Mm|Gg|Tt|Pp]", "").trim());   
            BigDecimal b2 = new BigDecimal(1024);   
            BigDecimal bd2=b2.pow(3);
            return b1.multiply(bd2).toString();
        }else if(twoNum.contains("T") ||twoNum.contains("t")){
            BigDecimal b1 = new BigDecimal(twoNum.replaceAll("[Bb|Kk|Mm|Gg|Tt|Pp]", "").trim());   
            BigDecimal b2 = new BigDecimal(1024);   
            BigDecimal bd2=b2.pow(4);
            return b1.multiply(bd2).toString();
        }else if(twoNum.contains("P") ||twoNum.contains("p")){
            BigDecimal b1 = new BigDecimal(twoNum.replaceAll("[Bb|Kk|Mm|Gg|Tt|Pp]", "").trim());   
            BigDecimal b2 = new BigDecimal(1024);   
            BigDecimal bd2=b2.pow(5);
            return b1.multiply(bd2).toString();
        }else if((twoNum.contains("B") ||twoNum.contains("b"))){
            resurs=twoNum.replaceAll("[Bb|Kk|Mm|Gg|Tt|Pp]", "");
            return resurs;
        }
        
        return resurs;
    }
    
//    public static void main (String[] args) {
////        long iops = twoToten(getSwIOPS(0.9036296952067788,
////                -2, -2));
////        long tps = twoToten(getSwIOPS(0.0,
////                -0.09950544016, -1.96913946586));
////        System.out.println(iops+" "+tps);
////        BigInteger i = new BigInteger("9223372036854775808");
////        i.shiftLeft(1);
////        long v = DataUtils.formatVersion("1.1.1.6");
////        System.out.println(Long.toBinaryString(v));
////        long l = 2451474928634946561l;
////        System.out.println(DataUtils.displacement(l, 0, 2));
////        System.out.println(Long.toBinaryString(2451474928634946561l));
//        /*long appno = 32778l & ((1l << 13) - 1);
//        long scope = 32778l >> 13;
//        scope = Long.parseLong("6");
//        appno = Long.parseLong("77");
//        String version = "6.6.6";
//        long e = DataUtils.formatEvo(scope, appno, version);
//        System.out.println("evo param is " + e);
//        System.out.println("evo param binaryString is " + Long.toBinaryString(e));
//        
//        System.out.println(Long.toBinaryString(-8935141660703064064l));
//        long r = DataUtils.displacement(-8935141660703064064l, 0, 3);
//        System.out.println(r);
//        System.out.println(Long.toBinaryString(1l));
//        System.out.println(1l >> 10);
//        */
//        
//    /*    int r = DataUtils.formatRWX("rw-");
//        System.out.println(r);
//        String a = DataUtils.intToRWX("8");
//        System.out.println(a);
//        RWXHSA hsa = new RWXHSA();
//        boolean b = hsa.check("8");
//        System.out.println(b);
//        b = hsa.check("rwxrwx");
//        System.out.println(b);*/
//        
//        
//    }
}

posted @ 2017-09-01 14:06  枫沫  阅读(574)  评论(0编辑  收藏  举报