123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344 |
- package rs485;
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.UnsupportedEncodingException;
- import java.nio.ByteBuffer;
- public class ByteUtil {
- private static ByteBuffer buffer = ByteBuffer.allocate(8);
- /**
- * int转byte
- * @param x
- * @return
- */
- public static byte intToByte(int x) {
- return (byte) x;
- }
- /**
- * byte转int
- * @param b
- * @return
- */
- public static int byteToInt(byte b) {
- //Java的byte是有符号,通过 &0xFF转为无符号
- return b & 0xFF;
- }
- /**
- * byte[]转int
- * @param b
- * @return
- */
- public static int byteArrayToInt(byte[] b) {
- return b[3] & 0xFF |
- (b[2] & 0xFF) << 8 |
- (b[1] & 0xFF) << 16 |
- (b[0] & 0xFF) << 24;
- }
- public static int byteArrayToInt(byte[] b, int index){
- return b[index+3] & 0xFF |
- (b[index+2] & 0xFF) << 8 |
- (b[index+1] & 0xFF) << 16 |
- (b[index+0] & 0xFF) << 24;
- }
- /**
- * int转byte[]
- * @param a
- * @return
- */
- public static byte[] intToByteArray(int a) {
- return new byte[] {
- (byte) ((a >> 24) & 0xFF),
- (byte) ((a >> 16) & 0xFF),
- (byte) ((a >> 8) & 0xFF),
- (byte) (a & 0xFF)
- };
- }
- /**
- * short转byte[]
- *
- * @param b
- * @param s
- * @param index
- */
- public static void byteArrToShort(byte b[], short s, int index) {
- b[index + 1] = (byte) (s >> 8);
- b[index + 0] = (byte) (s >> 0);
- }
- /**
- * byte[]转short
- *
- * @param b
- * @param index
- * @return
- */
- public static short byteArrToShort(byte[] b, int index) {
- return (short) (((b[index + 0] << 8) | b[index + 1] & 0xff));
- }
- /**
- * 16位short转byte[]
- *
- * @param s
- * short
- * @return byte[]
- * */
- public static byte[] shortToByteArr(short s) {
- byte[] targets = new byte[2];
- for (int i = 0; i < 2; i++) {
- int offset = (targets.length - 1 - i) * 8;
- targets[i] = (byte) ((s >>> offset) & 0xff);
- }
- return targets;
- }
- /**
- * byte[]转16位short
- * @param b
- * @return
- */
- public static short byteArrToShort(byte[] b){
- return byteArrToShort(b,0);
- }
- /**
- * long转byte[]
- * @param x
- * @return
- */
- public static byte[] longToBytes(long x) {
- buffer.putLong(0, x);
- return buffer.array();
- }
- /**
- * byte[]转Long
- * @param bytes
- * @return
- */
- public static long bytesToLong(byte[] bytes) {
- buffer.put(bytes, 0, bytes.length);
- buffer.flip();//need flip
- return buffer.getLong();
- }
- /**
- * 从byte[]中抽取新的byte[]
- * @param data - 元数据
- * @param start - 开始位置
- * @param end - 结束位置
- * @return 新byte[]
- */
- public static byte[] getByteArr(byte[]data,int start ,int end){
- byte[] ret=new byte[end-start];
- for(int i=0;(start+i)<end;i++){
- ret[i]=data[start+i];
- }
- return ret;
- }
- /**
- * 流转换为byte[]
- * @param inStream
- * @return
- */
- public static byte[] readInputStream(InputStream inStream) {
- ByteArrayOutputStream outStream = null;
- try {
- outStream = new ByteArrayOutputStream();
- byte[] buffer = new byte[1024];
- byte[] data = null;
- int len = 0;
- while ((len = inStream.read(buffer)) != -1) {
- outStream.write(buffer, 0, len);
- }
- data = outStream.toByteArray();
- return data;
- }catch (IOException e) {
- return null;
- } finally {
- try {
- if (outStream != null) {
- outStream.close();
- }
- if (inStream != null) {
- inStream.close();
- }
- } catch (IOException e) {
- return null;
- }
- }
- }
- /**
- * byte[]转inputstream
- * @param b
- * @return
- */
- public static InputStream readByteArr(byte[] b){
- return new ByteArrayInputStream(b);
- }
- /**
- * byte数组内数字是否相同
- * @param s1
- * @param s2
- * @return
- */
- public static boolean isEq(byte[] s1,byte[] s2){
- int slen=s1.length;
- if(slen==s2.length){
- for(int index=0;index<slen;index++){
- if(s1[index]!=s2[index]){
- return false;
- }
- }
- return true;
- }
- return false;
- }
- /**
- * byte数组转换为Stirng
- * @param s1 -数组
- * @param encode -字符集
- * @param err -转换错误时返回该文字
- * @return
- */
- public static String getString(byte[] s1, String encode, String err){
- try {
- return new String(s1,encode);
- } catch (UnsupportedEncodingException e) {
- return err==null?null:err;
- }
- }
- /**
- * byte数组转换为Stirng
- * @param s1-数组
- * @param encode-字符集
- * @return
- */
- public static String getString(byte[] s1, String encode){
- return getString(s1,encode,null);
- }
- //测试
- public static void main(String[]args){
- System.err.println(isEq(new byte[]{1,2},new byte[]{1,2}));
- }
- /**
- * 字节数组转16进制字符串
- * @param b
- * @return
- */
- public static String byteArrToHexString(byte[] b){
- String result="";
- for (int i=0; i < b.length; i++) {
- result += Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring(1);
- }
- return result;
- }
- /**
- * 16进制字符创转int
- * @param hexString
- * @return
- */
- public static int hexStringToInt(String hexString){
- return Integer.parseInt(hexString,16);
- }
- /**
- * 十进制转二进制
- * @param i
- * @return
- */
- public static String intToBinary(int i){
- return Integer.toBinaryString(i);
- }
- /**
- * 16进制字符串转换成byte数组 这个转的多了会报错
- * */
- public static byte[] Hex2Bytes(String hexString){
- byte[] arrB = hexString.getBytes();
- int iLen = arrB.length;
- byte[] arrOut = new byte[iLen / 2];
- String strTmp = null;
- for (int i = 0; i < iLen; i += 2)
- {
- strTmp = new String(arrB, i, 2);
- arrOut[(i / 2)] = ((byte) Integer.parseInt(strTmp, 16));
- }
- return arrOut;
- }
- /**
- * 16进制字符串转换成byte数组
- * @param hexStr
- * @return
- */
- public static byte[] hexToByteArr(String hexStr) {
- String HexStr = "0123456789abcdef";
- char[] charArr = hexStr.toCharArray();
- byte btArr[] = new byte[charArr.length / 2];
- int index = 0;
- for (int i = 0; i < charArr.length; i++) {
- int highBit = HexStr.indexOf(charArr[i]);
- int lowBit = HexStr.indexOf(charArr[++i]);
- btArr[index] = (byte) (highBit << 4 | lowBit);
- index++;
- }
- return btArr;
- }
- /**
- * 16进制字符串转换成byte数组
- * */
- public static byte[] String2Byte(String s) {
- s = s.replace(" ", "");
- s = s.replace("#", "");
- 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();
- }
- }
- return baKeyword;
- }
- public static String hexStr2Str(String hexStr) {
- String str = "0123456789abcdef";
- char[] hexs = hexStr.toCharArray();
- byte[] bytes = new byte[hexStr.length() / 2];
- int n;
- for (int i = 0; i < bytes.length; i++) {
- n = str.indexOf(hexs[2 * i]) * 16;
- n += str.indexOf(hexs[2 * i + 1]);
- bytes[i] = (byte) (n & 0xff);
- }
- return new String(bytes);
- }
- /**
- * 字符串转换成为16进制(无需Unicode编码)
- * @param str
- * @return
- */
- public static String str2HexStr(String str) {
- char[] chars = "0123456789abcdef".toCharArray();
- StringBuilder sb = new StringBuilder("");
- byte[] bs = str.getBytes();
- int bit;
- for (int i = 0; i < bs.length; i++) {
- bit = (bs[i] & 0x0f0) >> 4;
- sb.append(chars[bit]);
- bit = bs[i] & 0x0f;
- sb.append(chars[bit]);
- // sb.append(' ');
- }
- return sb.toString().trim();
- }
- }
|