字符串,int,十六进制相互转换
2017-12-14 16:15
281 查看
public class TypeConvert { /* 字符串转byte[] 这个方法转换后的结果是会多一些 48字符进来的就是代表的是0不知道为什么,但是可以只是取出指定的字符串 */ public static byte[] hexStringToBytes(String hexString) { if (hexString == null || hexString.equals("")) { return null; } hexString = hexString.toUpperCase(); int length = hexString.length() / 2; char[] hexChars = hexString.toCharArray(); byte[] d = new byte[length]; for (int i = 0; i < length; i++) { int pos = i * 2; d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); } return d; } /* byte转short */ public final static short getShort(byte[] buf, boolean asc, int len) { short r = 0; if (asc) for (int i = len - 1; i >= 0; i--) { r <<= 8; r |= (buf[i] & 0x00ff); } else for (int i = 0; i < len; i++) { r <<= 8; r |= (buf[i] & 0x00ff); } return r; } /* B2 -> 0xB2 */ public static int stringToByte(String in, byte[] b) throws Exception { if (b.length < in.length() / 2) { throw new Exception("byte array too small"); } int j=0; StringBuffer buf = new StringBuffer(2); for (int i=0; i<in.length(); i++, j++) { buf.insert(0, in.charAt(i)); buf.insert(1, in.charAt(i+1)); int t = Integer.parseInt(buf.toString(),16); System.out.println("byte hex value:" + t); b[j] = (byte)t; i++; buf.delete(0,2); } return j; } /* byte to int */ public final static int getInt(byte[] buf, boolean asc, int len) { if (buf == null) { throw new IllegalArgumentException("byte array is null!"); } if (len > 4) { throw new IllegalArgumentException("byte array size > 4 !"); } int r = 0; if (asc) for (int i = len - 1; i >= 0; i--) { r <<= 8; r |= (buf[i] & 0x000000ff); } else for (int i = 0; i < len; i++) { r <<= 8; r |= (buf[i] & 0x000000ff); } return r; } /* int -> byte[] */ public static byte[] intToBytes(int num) { byte[] b = new byte[4]; for (int i = 0; i < 4; i++) { b[i] = (byte) (num >>> (24 - i * 8)); } return b; } /* short to byte[] */ public static byte[] shortToBytes(short num) { byte[] b = new byte[2]; for (int i = 0; i < 2; i++) { b[i] = (byte) (num >>> (i * 8)); } return b; } /* byte to String */ private static char findHex(byte b) { 4000 int t = new Byte(b).intValue(); t = t < 0 ? t + 16 : t; if ((0 <= t) &&(t <= 9)) { return (char)(t + '0'); } return (char)(t-10+'A'); } public static String byteToString(byte b) { byte high, low; byte maskHigh = (byte)0xf0; byte maskLow = 0x0f; high = (byte)((b & maskHigh) >> 4); low = (byte)(b & maskLow); StringBuffer buf = new StringBuffer(); buf.append(findHex(high)); buf.append(findHex(low)); return buf.toString(); } /* short -> byte */ public final static byte[] getBytes(short s, boolean asc) { byte[] buf = new byte[2]; if (asc) for (int i = buf.length - 1; i >= 0; i--) { buf[i] = (byte) (s & 0x00ff); s >>= 8; } else for (int i = 0; i < buf.length; i++) { buf[i] = (byte) (s & 0x00ff); s >>= 8; } return buf; } /* int -> byte[] */ public final static byte[] getBytes(int s, boolean asc) { byte[] buf = new byte[4]; if (asc) for (int i = buf.length - 1; i >= 0; i--) { buf[i] = (byte) (s & 0x000000ff); s >>= 8; } else for (int i = 0; i < buf.length; i++) { buf[i] = (byte) (s & 0x000000ff); s >>= 8; } return buf; } /* long -> byte[] */ public final static byte[] getBytes(long s, boolean asc) { byte[] buf = new byte[8]; if (asc) for (int i = buf.length - 1; i >= 0; i--) { buf[i] = (byte) (s & 0x00000000000000ff); s >>= 8; } else for (int i = 0; i < buf.length; i++) { buf[i] = (byte) (s & 0x00000000000000ff); s >>= 8; } return buf; } /* byte[]->int */ public final static int getInt(byte[] buf, boolean asc) { if (buf == null) { throw new IllegalArgumentException("byte array is null!"); } if (buf.length > 4) { throw new IllegalArgumentException("byte array size > 4 !"); } int r = 0; if (asc) for (int i = buf.length - 1; i >= 0; i--) { r <<= 8; r |= (buf[i] & 0x000000ff); } else for (int i = 0; i < buf.length; i++) { r <<= 8; r |= (buf[i] & 0x000000ff); } return r; } /* byte[] -> long */ public final static long getLong(byte[] buf, boolean asc) { if (buf == null) { throw new IllegalArgumentException("byte array is null!"); } if (buf.length > 8) { throw new IllegalArgumentException("byte array size > 8 !"); } long r = 0; if (asc) for (int i = buf.length - 1; i >= 0; i--) { r <<= 8; r |= (buf[i] & 0x00000000000000ff); } else for (int i = 0; i < buf.length; i++) { r <<= 8; r |= (buf[i] & 0x00000000000000ff); } return r; } }
相关文章推荐
- C语言实现字节流与十六进制字符串的相互转换
- Js字符串与十六进制的相互转换
- 【转】Java中实现字符串与十六进制编码相互转换
- iOS十六进制和字符串的相互转换
- 字符串,int,十六进制之间的转换
- C语言实现字节流与十六进制字符串的相互转换
- C语言十六进制数据同字符串的相互转换
- C语言实现字节流与十六进制字符串的相互转换
- C语言实现字节流与十六进制字符串的相互转换
- 二进制值和十六进制字符串相互转换的C++代码
- CString、char*、string、int、_bstr_t、CTime、COleDateTime相互转换,判断一个字符串是一个浮点数
- 十六进制与字符串的相互转换
- 内存内容与十六进制字符串相互转换
- C语言十六进制数据同字符串的相互转换
- 在C#语言中十六进制字符串与字节型数组的相互转换
- JAVA 字符串与二进制,十六进制 相互转换
- 使用Java完成byte数组与十六进制字符串相互转换
- JavaScript十六进制字符串和字节数组相互转换
- Go IP 地址字符串整数/string int 相互转换
- IOS开发NSString与int和float的相互转换以及字符串拼接