import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.Serializable;

import java.math.BigInteger;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

/**

* java格式处理工具类

*

* @author lay at 2014年8月7日09:12:20

*

* @version 1.0

*/

public final class EncodingUtil {

/**

* 将十进制整数转为byte数组(2字节) 仅限于2字节以内的十进制整数

*

* @param value

*            要转换的值

* @param flag

*            顺序选择,true高位在前,低位在后

* @return

*/

public static byte[] int2Bytes2(int value, boolean flag) {

if (flag) {

byte c[] = { (byte) ((value >>> 8) & 0xff), (byte) (value & 0xff) };

return c;

} else {

byte c[] = { (byte) (value & 0xff), (byte) ((value >>> 8) & 0xff) };

return c;

}

}

/**

* 将十进制整数转为byte数组(3字节) 仅限于3字节以内的十进制整数

*

* @param value

*            要转换的值

* @param flag

*            顺序选择,true高位在前,低位在后

* @return

*/

public static byte[] int2Bytes3(int value, boolean flag) {

if (flag) {

byte[] b = { (byte) ((value >>> 16) & 0xff), (byte) (value >>> 8),

(byte) (value & 0xff) };

return b;

} else {

byte[] b = { (byte) (value & 0xff), (byte) (value >>> 8),

(byte) ((value >>> 16) & 0xff) };

return b;

}

}

/**

* 将十进制整数转为byte数组(四字节)

*

* @param value

*            要转换的值

* @param flag

*            顺序选择,true高位在前,低位在后

* @return

*/

public static byte[] int2Bytes4(int value, boolean flag) {

byte[] src = new byte[4];

if (flag) {

src[0] = (byte) ((value >>> 24) & 0xFF);

src[1] = (byte) ((value >>> 16) & 0xFF);

src[2] = (byte) ((value >>> 8) & 0xFF);

src[3] = (byte) (value & 0xFF);

} else {

src[3] = (byte) ((value >>> 24) & 0xFF);

src[2] = (byte) ((value >>> 16) & 0xFF);

src[1] = (byte) ((value >>> 8) & 0xFF);

src[0] = (byte) (value & 0xFF);

}

return src;

}

/**

* 将byte数组转为十进制整数(四字节) 数组长度大于4时,按长度为4处理

*

* @param src

*            高位在前的长度为4的byte数组

* @return

*/

public static int byte2Int(byte[] src) {

int value;

switch (src.length) {

case 0:

value = 0;

break;

case 1:

value = (int) (src[0] & 0xFF);

break;

case 2:

value = (int) ((src[1] & 0xFF) | ((src[0] & 0xFF) << 8));

break;

case 3:

value = (int) ((src[2] & 0xFF) | ((src[1] & 0xFF) << 8) | ((src[0] & 0xFF) << 16));

break;

case 4:

value = (int) ((src[3] & 0xFF) | ((src[2] & 0xFF) << 8)

| ((src[1] & 0xFF) << 16) | ((src[0] & 0xFF) << 24));

break;

default:

value = (int) ((src[3] & 0xFF) | ((src[2] & 0xFF) << 8)

| ((src[1] & 0xFF) << 16) | ((src[0] & 0xFF) << 24));

break;

}

return value;

}

/**

* 将byte转为十六进制字符串,不会补0

*

* @param src

*            高位在前的长度为4的byte数组

* @return

*/

public static String byte2Hex(byte b) {

return Integer.toHexString(0xFF & b).toUpperCase();

}

/**

* 十六进制字符串前面补0

*

* @param hex

*            要补0的字符串

* @param len

*            补0后的长度

* @return

*/

public static String addZeroAtStart(String hex, int len) {

StringBuffer sb = new StringBuffer();

for (int i = 0; i < len - hex.length(); i++) {

sb.append("0");

}

sb.append(hex);

return sb.toString().toUpperCase();

}

/**

* 十六进制字符串后面补0

*

* @param hex

*            要补0的字符串

* @param len

*            补0后的长度

* @return

*/

public static String addZeroAtEnd(String hex, int len) {

StringBuffer sb = new StringBuffer();

sb.append(hex);

for (int i = 0; i < len - hex.length(); i++) {

sb.append("0");

}

return sb.toString().toUpperCase();

}

/**

* 1字节16进制字符串转byte

*

* @param value

* @return

*/

public static byte hex2Byte(String value) {

return (byte) (Integer.parseInt(value, 16) & 0xff);

}

/**

* 将16进制string当做一个整数转为byte数组

*

* @param crc

* @return

*/

public static byte[] hexs2Bytes2(String hex) {

BigInteger bi = new BigInteger(hex, 16);

return bi.toByteArray();

}

/**

* 将byte数组当成一个整数转换为16进制string

*

* @param bArray

* @return

*/

public static String bytes2Hexs2(byte[] bArray) {

BigInteger bi = new BigInteger(bArray);

return addZeroAtStart(bi.toString(16), bArray.length * 2);

}

/**

* 将byte数组当成字符数组转换为16进制string

*

* @param bArray

* @return

*/

public static String bytes2Hexs(byte[] bArray) {

StringBuffer sb = new StringBuffer();

for (int i = 0; i < bArray.length; i++) {

sb.append(addZeroAtStart(byte2Hex(bArray[i]), 2));

}

return sb.toString();

}

/**

* 把可序列化对象转换成字节数组

*

* @param s

* @return

* @throws IOException

*/

public static final byte[] object2Bytes(Serializable s) throws IOException {

ByteArrayOutputStream out = new ByteArrayOutputStream();

ObjectOutputStream ot = new ObjectOutputStream(out);

ot.writeObject(s);

ot.flush();

ot.close();

return out.toByteArray();

}

/**

* 将时间转换为4字节byte数组

*

* @param time

* @return

* @throws ParseException

*/

public static byte[] time2Bytes(String time) throws ParseException {

Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(time);

Calendar c = Calendar.getInstance();

c.setTime(date);

int as = (c.get(Calendar.HOUR_OF_DAY) * 60 + c.get(Calendar.MINUTE))

* 60 + c.get(Calendar.SECOND);

String hex = addZeroAtStart(Integer.toHexString(as), 8);

byte b[] = new byte[4];

for (int i = 0; i < 4; i++) {

b[i] = (byte) hex2Byte(hex.substring(i * 2, i * 2 + 2));

}

return b;

}

/**

* 日期转长度为3的byte数组对应年月日

*

* @param d

* @return

*/

public static byte[] date2Bytes(Date d) {

Calendar c = Calendar.getInstance();

c.setTime(d);

int year = c.get(Calendar.YEAR) % 100;

int month = c.get(Calendar.MONTH);

int day = c.get(Calendar.DAY_OF_MONTH);

byte[] b = new byte[3];

b[0] = (byte) (year & 0xff);

b[1] = (byte) (month & 0xff);

b[2] = (byte) (day & 0xff);

return b;

}

/**

* 处理Get请求产生的乱码 处理失败返回""

*

* @param temp

*            乱码

* @return 正确编码的字符串

*/

public static String string2GBK(String temp) {

try {

byte s[] = temp.getBytes("iso-8859-1");

return new String(s, "GBK");

} catch (Exception e) {

return "";

}

}

/**

* byte数组转以BCD码格式转为字符串

*

* @param bytes

*            BCD码

* @return 10进制串

*/

public static String bytes2BCD(byte[] bytes) {

StringBuffer temp = new StringBuffer(bytes.length * 2);

for (int i = 0; i < bytes.length; i++) {

temp.append((byte) ((bytes[i] & 0xf0) >>> 4));

temp.append((byte) (bytes[i] & 0x0f));

}

return temp.toString();

}

/**

* BCD码格式字符串转为byte数组

*

* @param bytes

*            BCD码

* @return 10进制串

*/

public static byte[] BCDString2Bytes(String str) {

int len = str.length();

if (len % 2 != 0) {

str = "0" + str;

}

byte[] b = new byte[str.length() / 2];

for (int i = 0; i < b.length; i++) {

b[i] = (byte) (((((str.charAt(i * 2) - '0') << 4) & 0xf0) | ((str

.charAt(i * 2 + 1) - '0') & 0x0f)) & 0xff);

}

return b;

}

/**

* BCD码格式字符串转为byte数组

*

* @param bytes

*            BCD码

* @return 10进制串

*/

public static String bytes2BCDString(byte[] b) {

return bytes2Hexs(b);

}

/**

* 10进制串转为BCD码

*

* @param asc

*            10进制串

* @return BCD码

*/

public static byte[] des2BCD(String des) {

int len = des.length();

if (len % 2 != 0) {

des = "0" + des;

}

byte[] b = new byte[des.length() / 2];

for (int i = 0; i < b.length; i++) {

b[i] = (byte) ((((des.charAt(i * 2) - '0') << 4) & 0xf0) | ((des

.charAt(i * 2 + 1) - '0') & 0x0f));

}

return b;

}

/**

* 10进制串转为BCD码

*

* @param bcd

*            BCD码byte数组

* @return BCD码

*/

public static int BCD2Des(byte[] bcd) {

StringBuffer sb = new StringBuffer("");

for (int i = 0; i < bcd.length; i++) {

sb.append((char) (((bcd[i] >>> 4) & 0x0f) + '0'));

sb.append((char) ((bcd[i] & 0x0f) + '0'));

}

return Integer.parseInt(sb.toString());

}

/**

* 将16进制字符串每两个字当做一个字节转换为byte数组

*

* @param hex

* @return

*/

public static byte[] hexs2Bytes(String hex) {

int len = hex.length();

if (len % 2 != 0) {

hex = "0" + hex;

}

byte[] result = new byte[len / 2];

for (int i = 0; i < result.length; i++) {

result[i] = hex2Byte(hex.substring(i * 2, i * 2 + 2));

}

return result;

}

/**

* char数组转16进制字符串

*

* @param c

* @return

*/

public static final String chars2Hexs(char[] c) {

StringBuffer sb = new StringBuffer();

for (int i = 0; i < c.length; i++) {

sb.append(addZeroAtStart(Integer.toHexString((int) c[i])

.toUpperCase(), 2));

}

return sb.toString();

}

/**

* 16进制字符串转char数组

*

* @param c

* @return

*/

public static final char[] Hexs2Chars(String str) {

int len = str.length();

if (len % 2 != 0) {

str = "0" + str;

}

char[] c = new char[str.length() / 2];

for (int i = 0; i < str.length() / 2; i++) {

c[i] = (char) hex2Des(str.substring(i * 2, i * 2 + 2));

}

return c;

}

/**

* 把字节数组转换为对象

*

* @param bytes

* @return

* @throws IOException

* @throws ClassNotFoundException

*/

public static final Object bytes2Object(byte[] bytes) throws IOException,

ClassNotFoundException {

ByteArrayInputStream in = new ByteArrayInputStream(bytes);

ObjectInputStream oi = new ObjectInputStream(in);

Object o = oi.readObject();

oi.close();

return o;

}

/**

* 10进制转16进制

*

* @param num

* @return

*/

public static final String des2Hexs(int num) {

return Integer.toHexString(num).toUpperCase();

}

/**

* 16进制转10进制

*

* @param s

* @return

*/

public static int hex2Des(String s) {

return Integer.parseInt(s, 16);

}

/**

* 16进制单字节转char

*

* @param hex

* @return

*/

public static char hex2Char(String hex) {

char c = (char) Integer.parseInt(hex, 16);

return c;

}

/**

* 16进制字符以字节为单位进行分割

*

* @param hex

*            16进制字符串,必须为整数个字节

* @return

*/

public static String[] hexs2hexs(String hex) {

String[] strs = new String[hex.length() / 2];

for (int i = 0; i < hex.length() / 2; i++) {

strs[i] = hex.substring(0 * 2, 0 * 2 + 1);

}

return strs;

}

/**

* 将字符串转为16进制字符串

*

* @param asc

* @return

*/

public static String string2Hexs(String strs) {

String str = String.valueOf(strs);

byte[] b = str.getBytes();

StringBuffer sb = new StringBuffer();

for (int i = 0; i < b.length; i++) {

sb.append(addZeroAtStart(byte2Hex(b[i]), 2));

}

return sb.toString();

}

}

java格式处理工具类的更多相关文章

  1. 使用java的Calendar工具类获取到本月的第一天起始时间和最后一天结束时间。

    1.使用java的Calendar工具类获取到本月的第一天起始时间和最后一天结束时间. package com.fline.aic.utils; import java.text.DateFormat ...

  2. JAVA 8 日期工具类

    JAVA 8 日期工具类 主题描述 JAVA中日期时间的历史 代码成果 主题描述 JAVA的日期时间一直比较混乱,本来以为joda会是巅峰,但是JAVA 8改变了我的思想.但是即便在JAVA 8面前, ...

  3. java 解析excel工具类

      java 解析excel工具类 CreateTime--2018年3月5日16:48:08 Author:Marydon ReadExcelUtils.java import java.io.Fi ...

  4. HttpTool.java(在java tool util工具类中已存在) 暂保留

    HttpTool.java 该类为java源生态的http 请求工具,不依赖第三方jar包 ,即插即用. package kingtool; import java.io.BufferedReader ...

  5. java文件处理工具类

    import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedRead ...

  6. Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类

    Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类   =========================== ©Copyright 蕃薯耀 2017年9月25日 http://www ...

  7. Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

    Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...

  8. JavaSE-基础语法(二)-系统类(java.lang.*)和工具类(java.util.*)

    系统类(java.lang.*)和工具类(java.util.*) 一.系统类(java.lang.*) 这个包下包含java语言的核心类,如String.Math.System和Thread类等,使 ...

  9. UrlUtils工具类,Java URL工具类,Java URL链接工具类

    UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>&g ...

随机推荐

  1. Welcome to JimmyCheung's blog!

    博客开通,写写学习笔记,写写心情,写写生活中的点点滴滴~ 有钱的捧个钱场嘞,没钱的贡献个点击量,新鲜的博客出炉咯,来五毛钱的博文呗~ By Jimmy 2014.09.16

  2. oracle技巧-持续更新

    1. 登录oracle数据库,执行select status from v$encryption_wallet,如果返回OPEN,表示钱夹已自动打开. 2.

  3. 判断是否为ie(包含ie11)

    if (!!window.ActiveXObject || "ActiveXObject" in window) { alert("IsIE"); }

  4. 【UVA1371】Period (二分+DP)

    题意: 给出两个字符串A,B将B分解成若干个子字符串,然后每个子字符串都要经过编辑变成字符串A,所有子串中编辑最多的次数即为当前状态下的最大编辑次数,要求求最小的最大编辑次数. 编辑操作包括修改.删除 ...

  5. C语言嵌入式系统编程修炼之五:键盘操作

    处理功能键 功能键的问题在于,用户界面并非固定的,用户功能键的选择将使屏幕画面处于不同的显示状态下.例如,主画面如图1:图1 主画面 当用户在设置XX上按下Enter键之后,画面就切换到了设置XX的界 ...

  6. android工程混淆和反编译

    一.工程文件的混淆 混淆文件下载:http://download.csdn.net/detail/lxq_xsyu/6328751 1.在根目录下添加progard.cfg文件 2.打开project ...

  7. innodb_buffer_pool_instances and innodb_buffer_pool_size的关系

    把buffer pool 分成一个用户指定的单独的区域, 每个有它自己的LRU list和相关的数据结构, 降低竞争在并发内存读取和写操作. 这个选项只有当innodb_buffer_pool_siz ...

  8. SQL*Net message to client

    SQL*Net message to client The server (foreground process) is sending a message to the client. 这个wait ...

  9. WPF Application 执行顺序

    public static void Main() { ApplicationClass.App app = new ApplicationClass.App();app.InitializeComp ...

  10. Light OJ 1038 - Race to 1 Again(概率DP)

    题目的意思是说任何一个大于1的整数,经过若干次除以自己的因子之后可以变为1, 求该变换字数的数学期望值.   题目分析: 我们设置dp[n] 为数字n的期望.假设n的因子为k1, k2, k3.... ...