`
qq1988627
  • 浏览: 107159 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

进制转换

 
阅读更多
package p5.com.byd.mes.dev.tool.baseToChar;

/**
 * 任意进制转换器
 * @author solar
 */
public class Decimal {

    String imalss = "";
    String[] imal = new String[10];
    int flag = 0;

    public Decimal(String imals) {
        String[] temp = imals.split("");
        String[] imalTemp = new String[temp.length - 1];
        for (int i = 0; i < imalTemp.length; i++) {
            imalTemp[i] = temp[i + 1].toUpperCase();
        }
        imalss = imals.toUpperCase();
        imal = imalTemp;
        flag = imal.length;
    }

    public long toDec(String in) throws Exception {
        long temp = 0;
        in = in.toUpperCase();
        String[] ins = in.split("");
        for (int i = 1; i < ins.length; i++) {
            long ff = imalss.indexOf(ins[i]);
            if (ff == -1) {
                throw new Exception("非法字符串");
            }
            temp = temp + solar(ins.length - i) * ff;
        }
        return temp;
    }

    public String parseDec(long in) throws Exception {
        StringBuffer sbTemp = new StringBuffer();
        long i = in % flag;
        while (in != 0) {
            sbTemp.append(imal[(int) i]);
            in = in / flag;
            i = in % flag;
        }
        sbTemp.reverse();
        return new String(sbTemp);
    }

    private long solar(int length) {
        long temp = 1;
        while (length > 1) {
            temp = temp * flag;
            length--;
        }
        return temp;
    }

    /***************************************************************************
     * 单元测试
     * @param args the command line arguments
     **************************************************************************/
    public static void main(String[] args) throws Exception {
        Decimal dec = new Decimal("23456789BCDFGHJKLMNPQRSTVWXZ");//构造一个指定的进制对象。
        //System.out.println(dec.toDec("23420"));
        System.out.println(dec.parseDec(892));
    }
}
private static final Log log = LogFactory.getLog(Base28Impl.class);
 private static Decimal dec = new Decimal("23456789BCDFGHJKLMNPQRSTVWXZ");//构造自定义28进制的对象
 @Override
 public String getDesc() {
  return "二十八进制"; 
 }
 @Override
 public String get(long cursor, NextNumberBO nextNumberBO) {
  String data =  null; 
  try {
   data = dec.parseDec(cursor);   
  } catch (Exception e) {
   log.debug(e.getMessage());
   throw new RuntimeException("二十八进制转换失败!");
  }
  long sequenceLength = 0L;
  try {
   sequenceLength = dec.toDec(nextNumberBO.getSequenceLength());
  } catch (Exception e) {
   log.debug(e.getMessage());
  }
  //产生二十八进制的流水号。
  return StringUtils.leftPad(data, (int)sequenceLength, "2");
 }
 
 @Override
 public boolean isEngenderNextNumber(NextNumberBO nextNumberBO) {
  long maxSequence = 0L;
  long currentSequence = 0L;
  try {
   maxSequence = dec.toDec(nextNumberBO.getMaxSequence());
   currentSequence = dec.toDec(nextNumberBO.getCurrentSequence());
  } catch (Exception e) {
   log.debug(e.getMessage());
  }
  long qty = maxSequence - nextNumberBO.getDistributeNum().longValue();
  long newQty = currentSequence + nextNumberBO.getIncr().longValue();
  //已分配数量少于最大序列 且 可分配数量要大于等于增量 且 最大序列要大于 (当前序列+增量)的和
  boolean falg = nextNumberBO.getDistributeNum().longValue() < maxSequence 
      && qty >= nextNumberBO.getIncr().longValue()
      && maxSequence > newQty;
  return falg;
 }
 
 
 @Override
 public boolean validate(NextNumberBO nextNumberBO) {
  if(!validateSequence(nextNumberBO.getSequenceLength().toString()))
   throw new RuntimeException("验证序列长度失败,请填写正确的数据进行操作!");
  if(!validateSequence(nextNumberBO.getMaxSequence().toString()))
   throw new RuntimeException("验证最大序列失败,请填写正确的数据进行操作!");
  if(!validateSequence(nextNumberBO.getMinSequence().toString()))
   throw new RuntimeException("验证最小序列失败,请填写正确的数据进行操作!");
  if(!validateSequence(nextNumberBO.getCurrentSequence().toString()))
   throw new RuntimeException("验证当前序列失败,请填写正确的数据进行操作!");
  long maxSequence = 0L;
  long minSequence = 0L;
  long currentSequence = 0L;
  
  try {
   maxSequence = dec.toDec(nextNumberBO.getMaxSequence());
   minSequence = dec.toDec(nextNumberBO.getMinSequence());
   currentSequence = dec.toDec(nextNumberBO.getCurrentSequence());
  } catch (Exception e) {
   log.debug(e.getMessage());
  }
  if(maxSequence < minSequence)
   throw new RuntimeException("最大序列必须大于最小序列!");
  if(maxSequence < currentSequence)
   throw new RuntimeException("最大序列必须大于当前序列!");
  long distributeUnitNum = nextNumberBO.getDistributeUnitNum().longValue();
  if(distributeUnitNum > maxSequence)
   throw new RuntimeException("预加载分配单元数不能大于最大序列");
  long distributeNum = nextNumberBO.getDistributeNum().longValue();
  if(distributeNum > maxSequence)
   throw new RuntimeException("已分配数不能大于最大序列");
  return true;
 }
 /**
  * 验证是否是正确的二十八进制数值
  * @param sequence
  * @return
  */
 private boolean validateSequence(String sequence){
  Pattern pattern = Pattern.compile("[0-9B-Z&&[^EYUIO]]+");//二十八进制的正则表达式
  return pattern.matcher(sequence).matches();
 }
 /**
  * 28进制的日期格式转换
  * @param pattern
  * @return
  */
 @Override
 public String toDate(String pattern){  
  SimpleDateFormat format = new SimpleDateFormat(pattern);
  String result = format.format(new Date());
  StringBuffer buffer = new StringBuffer();
  Date date = null;
  try {
   date = (Date)format.parseObject(result);
  } catch (ParseException e) {
   e.printStackTrace();
  }
  if(pattern.indexOf("yyyy") > -1){
   String year = Base28Utils.getYear(date.getYear()+1900);
   buffer.append(year);
  }
  
  if(pattern.indexOf("MM") > -1){
   String month = Base28Utils.getMonth(date.getMonth()+1);
   buffer.append(month);
  }
  
  if(pattern.indexOf("dd") > -1){
   String day = getResult(date.getDate());
   buffer.append(day);
  }
  
  if(pattern.indexOf("HH") > -1){
   String hours = getResult(date.getHours());
   buffer.append(hours);
  }
  
  if(pattern.indexOf("mm") > -1){
   String minutes = getResult(date.getMinutes());
   buffer.append(minutes);
  }
  
  if(pattern.indexOf("ss") > -1){
   String seconds = getResult(date.getSeconds());
   buffer.append(seconds);
  }
  return buffer.toString();
 }
 /**
  * 
  * getResult:(将数值转换成相对应的进制)
  * @param  @param data
  * @return String
  */
 private String getResult(long data){
  try{
   return dec.parseDec(data);
  }catch(Exception ex){
  }
  return null;
 }

 

分享到:
评论

相关推荐

    进制转换C源码

    压缩包内的文件`进制转换update.c`可能包含了对原有代码的更新或改进,`进制转换toInt.c`可能是一个专门用于将其他进制转换成整数的函数,而`进制转换.c`则可能是整个进制转换功能的核心源文件。 在C语言中实现进制...

    基于单片机(AT89C51)的进制转换及进制计算器.rar

    综上所述,"基于单片机(AT89C51)的进制转换及进制计算器"项目涵盖了单片机原理、进制转换算法、程序设计、硬件接口设计等多个方面的知识。通过这个项目,开发者不仅可以提升单片机编程技能,还能深入理解进制转换的...

    辅助软件 进制转换V2.1

    辅助软件 进制转换V2.1辅助软件 进制转换V2.1辅助软件 进制转换V2.1辅助软件 进制转换V2.1辅助软件 进制转换V2.1辅助软件 进制转换V2.1辅助软件 进制转换V2.1辅助软件 进制转换V2.1辅助软件 进制转换V2.1辅助软件 ...

    易语言模块完全进制转换.rar

    《易语言模块完全进制转换》 易语言作为一款国内自主研发的编程语言,以其独特的“易”学特性,深受广大编程初学者和爱好者喜爱。在编程过程中,进制转换是一项基础且重要的技能,无论是十进制、二进制、八进制还是...

    微机原理进制转换程序设计

    "微机原理进制转换程序设计" 本资源摘要信息是关于微机原理中进制转换程序设计的知识点总结。进制转换是计算机科学中一个非常重要的概念,涉及到不同数制之间的转换,如二进制、十进制、十六进制等。 1. 需求说明 ...

    西门子TIA博途进制转换功能.pdf

    文档中虽然存在OCR扫描识别错误,但是可以推测出内容涉及了进制转换相关的关键字,比如“Decimal number”代表十进制数,“Hex”代表十六进制数,这些关键字都是进行进制转换时常用的术语。 文档提供的其他链接和...

    各种进制转换工具精简版

    进制转换是计算机科学中的基础概念,用于在不同的数值系统之间转换数字,常见的有二进制、八进制、十进制和十六进制。在编程和计算机操作中,理解和运用这些进制转换至关重要。 标题"各种进制转换工具精简版"指的是...

    用mfc弄的进制转换器

    进制转换是计算机科学中的基础概念,用于在不同的数值系统之间转换数字。在这个场景中,我们讨论的是一个基于MFC(Microsoft Foundation Classes)框架编写的进制转换器应用。MFC是微软提供的一套C++类库,它使得...

    计算机各种进制转换练习题(附答案).pdf

    计算机各种进制转换练习题 计算机中的进制转换是计算机科学和信息技术中的一种基本概念。它是指在不同进制系统之间进行数值表示的转换,例如十进制、 二进制、八进制、十六进制等。下面是计算机各种进制转换的练习...

    进制转换_C#_进制转换_

    在编程领域,进制转换是一项基础且重要的技能。在C#这种高级编程语言中,进行进制转换可以方便地处理二进制、八进制、十进制和十六进制等不同数字系统之间的数据交互。本项目是一个专门针对进制转换的小程序,旨在...

    SQL语句实现进制转换

    至于八进制到十六进制,我们需要先将八进制转换为十进制,然后将十进制转换为十六进制。在转换为十进制之后,我们可以使用`HEX`函数(在某些系统中可能为`CONVERT(VARBINARY, ..., 16)`)将数字转换为十六进制。例如...

    ASCII及十六进制转换工具 ASCII及十六进制转换工具

    了解并能够灵活运用ASCII码与十六进制转换对于IT专业人员来说是至关重要的。 ASCII码是基于拉丁字母的一套电脑编码系统,最初设计用于打字机,现在已经成为电子通信的标准之一。它包含了128个字符,包括英文大小写...

    winform c# 进制转换

    在C#编程环境中,Winform应用常常用于创建用户界面,而进制转换是计算机科学的基础概念,涉及到二进制(Binary)、八进制(Octal)、十进制(Decimal)和十六进制(Hexadecimal)之间的数值转换。下面将详细阐述如何...

    进制转换练习题及答案39资料.pdf

    "进制转换练习题及答案39资料.pdf" 本文档提供了39道进制转换练习题及答案,涵盖二进制、十进制、十六进制之间的转换,ASCII 码、汉字国标码、商品条形码等标准化编码的知识点。通过这些练习题,可以帮助学生和从业...

    魔兽争霸 WAR3 JASS技能ID进制转换器

    《魔兽争霸WAR3 JASS技能ID进制转换器详解及应用》 在魔兽争霸III(WAR3)的游戏世界中,地图编辑器与JASS(Just Another Scripting System)语言为玩家提供了无限的创意空间,让游戏爱好者能够自定义游戏规则、...

    进制转换小程序

    进制转换是计算机科学中的基础概念,涉及到二进制(Binary)、八进制(Octal)、十进制(Decimal)和十六进制(Hexadecimal)等不同数字系统间的转换。这些进制转换在编程、数据存储、硬件设计等多个IT领域都有广泛...

    超强进制转换工具 二进制 八进制 十进制 十六进制转换

    在IT领域,进制转换是一项基础且至关重要的技能,它涉及到计算机科学的多个方面,如数据存储、计算、编码和通信。本工具专注于二进制、八进制、十进制和十六进制之间的转换,这些是计算机系统中最常见的数字表示形式...

    计算机各种进制转换练习题(附答案)(20211001192755).pdf

    "计算机各种进制转换练习题" 计算机进制转换是计算机科学中的一种基本概念,指的是将不同进制的数字进行相互转换,如十进制、 二进制、八进制、十六进制等。这种转换在计算机科学和编程中有着广泛的应用。 在本...

    Java实现的进制转换工具类完整示例

    Java实现的进制转换工具类完整示例 Java实现的进制转换工具类是Java语言中的一种常用工具类,用于实现各种进制之间的转换操作,如二进制、十六进制、字符串、数组等。该工具类主要提供了将字节数组转换为十六进制...

Global site tag (gtag.js) - Google Analytics