您的位置:澳门正规赌博十大网站 > 操作系统 > java十六进制

java十六进制

发布时间:2019-10-03 23:32编辑:操作系统浏览(57)

    在有个别需求个中大家须要抓取字段而且填充到excel表格里面,最终将excel表格转变来pdf格式进行输出,作者第三遍接触这一个要求时,蒙受多少个比较费劲的难点,以后各类列出並且提供实施方案。

    JAVA 十六进制与字符串的转移,java十六进制

    toHexString
    public static String toHexString(int i)以十六进制的无符号整数情势重回二个卡尺头参数的字符串表示格局。
    假如参数为负,那么无符号整数值为参数加上 232;不然等于该参数。将该值转变为十六进制(基数 16)的无前导 0 的 ASCII 数字字符串。如若无符号数的大小值为零,则用三个零字符 '0' ('u0030') 表示它;不然,无符号数大小的意味格局中的第三个字符将不是零字符。用以下字符作为十六进制数字:
    0123456789abcdef
    这一个字符的范围是从 'u0030' 到 'u0039' 和从 'u0061' 到 'u0066'。若是期待得到大写字母,能够在结果上调用 String.toUpperCase() 方法:
    Integer.toHexString(n).toUpperCase()
    参数:
    i - 要转变来字符串的整数。
    返回:
    用十六进制(基数 16)参数表示的无符号整数值的字符串表示情势。
    // 转化字符串为十六进制编码
    public static String toHexString(String s)
    {
    String str="";
    for (int i=0;i<s.length();i++)
    {
    int ch = (int)s.charAt(i);
    String s4 = Integer.toHexString(ch);
    str = str + s4;
    }
    return str;
    }
    // 转化十六进制编码为字符串
    public static String toStringHex(String s)
    {
    byte[] baKeyword = new byte[s.length()/2];
    for(int i = 0; i < baKeyword.length; i++)
    {
    try
    {
    baKeyword[i] = (byte)(0xff & Integer.parseInt(s.substring(i*2, i*2+2),16));
    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    }
    try
    {
    s = new String(baKeyword, "utf-8");//UTF-16le:Not
    }
    catch (Exception e1)
    {
    e1.printStackTrace();
    }
    return s;
    }
    // 转化十六进制编码为字符串
    public static String toStringHex(String s)
    {
    byte[] baKeyword = new byte[s.length()/2];
    for(int i = 0; i < baKeyword.length; i++)
    {
    try
    {
    baKeyword[i] = (byte)(0xff & Integer.parseInt(s.substring(i*2, i*2+2),16));
    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    }
    try
    {
    s = new String(baKeyword, "utf-8");//UTF-16le:Not
    }
    catch (Exception e1)
    {
    e1.printStackTrace();
    }
    return s;
    }
    public static void main(String[] args) {
    System.out.println(encode("中文"));
    System.out.println(decode(encode("中文")));
    }
    /*
    * 16进制数字字符集
    */
    private static String hexString="0123456789ABCDEF";
    /*
    * 将字符串编码成16进制数字,适用于全体字符(满含普通话)
    */
    public static String encode(String str)
    {
    //根据暗中认可编码获取字节数组
    byte[] bytes=str.getBytes();
    StringBuilder sb=new StringBuilder(bytes.length*2);
    //将字节数组中每种字节拆解成2位16进制整数
    for(int i=0;i<bytes.length;i++)
    {
    sb.append(hexString.charAt((bytes[i]&0xf0)>>4));
    sb.append(hexString.charAt((bytes[i]&0x0f)>>0));
    }
    return sb.toString();
    }
    /*
    * 将16进制数字解码成字符串,适用于全数字符(包涵中文)
    */
    public static String decode(String bytes)
    {
    ByteArrayOutputStream baos=new ByteArrayOutputStream(bytes.length()/2);
    //将每2位16进制整数组装成二个字节
    for(int i=0;i<bytes.length();i+=2)
    baos.write((hexString.indexOf(bytes.charAt(i))<<4 |hexString.indexOf(bytes.charAt(i+1))));
    return new String(baos.toByteArray());
    }
    第二种艺术:
    将钦命byte数组以16进制的花样打字与印刷到调节台
    复制代码 代码如下:
    package com.nantian.iclient.atm.sdb;

    public class Util {
    public Util() {
    }

    /**
    * 将钦定byte数组以16进制的花样打字与印刷到调节台
    * @param hint String
    * @param b byte[]
    * @return void
    */
    public static void printHexString(String hint, byte[] b) {
    System.out.print(hint);
    for (int i = 0; i < b.length; i++) {
    String hex = Integer.toHexString(b[i] & 0xFF);
    if (hex.length() == 1) {
    hex = '0' + hex;
    }
    System.out.print(hex.toUpperCase() + " ");
    }
    System.out.println("");
    }

    /**
    *
    * @param b byte[]
    * @return String
    */
    public static String Bytes2HexString(byte[] b) {
    String ret = "";
    for (int i = 0; i < b.length; i++) {
    String hex = Integer.toHexString(b[i] & 0xFF);
    if (hex.length() == 1) {
    hex = '0' + hex;
    }
    ret += hex.toUpperCase();
    }
    return ret;
    }

    /**
    * 将八个ASCII字相符成四个字节;
    * 如:"EF"--> 0xEF
    * @param src0 byte
    * @param src1 byte
    * @return byte
    */
    public static byte uniteBytes(byte src0, byte src1) {
    byte _b0 = Byte.decode("0x" + new String(new byte[]{src0})).byteValue();
    _b0 = (byte)(_b0 << 4);
    byte _b1 = Byte.decode("0x" + new String(new byte[]{src1})).byteValue();
    byte ret = (byte)(_b0 ^ _b1);
    return ret;
    }

    /**
    * 将点名字符串src,以每多少个字符分割转变为16进制情势
    * 如:"2B44EFD9" --> byte[]{0x2B, 0x44, 0xEF, 0xD9}
    * @param src String
    * @return byte[]
    */
    public static byte[] HexString2Bytes(String src){
    byte[] ret = new byte[8];
    byte[] tmp = src.getBytes();
    for(int i=0; i<8; i++){
    ret[i] = uniteBytes(tmp[i*2], tmp[i*2+1]);
    }
    return ret;
    }

    }

    十六进制与字符串的转变,java十六进制 toHexString public static String toHexString(int i)以十六进制的无符号整数形式再次来到叁个整数参数的字符串...

    1:excel转pdf出现乱码:

        第三次excel转pdf是马到功成的,第壹次始发后边都已经乱码,是因为自身的pdf转excel方法出现的主题材料,解决办法是行使java自个儿底层的法子(详见下方代码)。

     public static boolean getLicense() {
            boolean result = false;
            try {
                InputStream is = Thread.currentThread().getContextClassLoader()
                        .getResourceAsStream("license.xml"); //  license.xml应放在..WebRootWEB-INFclasses路径下
                License aposeLic = new License();
                aposeLic.setLicense(is);
                result = true;
            } catch (Exception e) {               
                e.printStackTrace();
            }
            return result;
        }
        
        
        public static void excelTransferPdf(String excelPath,String pdfPath) {
            if (!getLicense()) {
                System.out.println("license faile");
                return;
            }
            
            try {     
                Workbook wb = new Workbook(excelPath);
                FileOutputStream fileOS = new FileOutputStream(new File(pdfPath));
                wb.save(fileOS, com.aspose.cells.SaveFormat.PDF);
                fileOS.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    2:excel转pdf现身折行。

      excel转pdf出现折行的景观极度广阔,因为在程序运维进程中过多字段是抓取的,你不恐怕推断你的excel转成pdf会有几页,所以这一年你就绝不轻便设置excel的预览格式,将excel的单元格式设置自动换行。

    3:抓取字段展现结果不完全:。

      当您未设置单元格大小而又尚未设置单元格自动换行,举个例子你的A18单元格里面包车型客车字段超过了单元格的尺寸你还并未有设置单元格大小而又从不安装单元格自动换行,就将抓取的字段填充在B18单元格里面,那么打字与印刷出来的pdf文件A18单元格高出单元杰出的剧情是不予展现的,此时您要么将抓取字段填充在C18单元格内要么将更换A18单元格格式

    4:excel转PDF字段内容无故中间有些换行:

      那是自个儿遭逢的最坑的一个地点,那个时候你只需要在excel单元格里面安装自动换行就可以,无需代码强行自动换行(强行换行有非常大大概只现出多行数据只呈现一行)。同一时候你需求如下代码:

    /**
         * 得到多少个字符串的长度,显示的尺寸,四当中中原人民共和国字或日克罗地亚语长度为1,土耳其共和国语字符长度为0.5
         *
         * @param String
         *            s 须求获得长度的字符串
         * @return int 得到的字符串长度
         */
        public static double getLength(String s) {
            double valueLength = 0;
            if (s == null) {
                return 0;
            }
            String chinese = "[u4e00-u9fa5]";
            // 获取字段值的尺寸,要是含中文字符,则每当中文字符长度为2,不然为1
            for (int i = 0; i < s.length(); i++) {
                // 获取一个字符
                String temp = s.substring(i, i + 1);
                // 决断是还是不是为华语字符
                if (temp.matches(chinese)) {
                    // 普通话字符长度为2
                    valueLength += 2;
                } else {
                    // 其余字符长度为1
                    valueLength += 1;
                }
            }
            // 进位取整
            return Math.ceil(valueLength);
        }

        /**
         * 依照字符串长度获取行高
         *
         * @param str
         * @return
         */
        public static Float getRowHeight(String str) {

            Integer lineCount = (int) (getLength(str) / 64) + 1;
            if (str.contains("n")) {
                Integer tempLineCount = 1;
                String[] lines = str.split("n");
                for (String line : lines) {
                    Integer everyLineCount = (int) (getLength(line) / 64) + 1;
                    tempLineCount += everyLineCount;
                }
                lineCount = lineCount >= tempLineCount ? lineCount : tempLineCount;
            }
            Float rowHeight = (float) (lineCount * 20);
            return rowHeight;
        }

    你需求先获得抓取的字符串的尺寸,然后经过那个点子总结行高,再将excel要求填写的该行用Java代码设置行高(行高单位是像素),可是假设出现本身下边说的字段内容无故中间有个别换行,那么您拿走的行高就能相差,那年你须求改动那几个地点----->>>>Float rowHeight = (float) (lineCount * X);  x的值一定要安装的大学一年级行,避防出现这种气象!

     

    本文由澳门正规赌博十大网站发布于操作系统,转载请注明出处:java十六进制

    关键词:

上一篇:没有了

下一篇:没有了