各数据类型的转换(十进制转二进制,二进制转十进制)
/**
* 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);*/
//
//
// }
}