1,字符串->整数
需求 | 代码 | 备注 |
---|---|---|
string->int | Integer.parse(“123”) | |
hexstring->int | Integer.parse(“FF00”,16) | 可以指定解码哪种进制,但前面不带0x之类 |
通用带格式string->int | Integer.decode(“0xAABB”) | 支持前面带格式自动判断几进制 |
2,整数->字符串
需求 | 代码 | 备注 |
---|---|---|
int->string | Integer.toString(123) | |
int->hexstring | Integer.toHexString(123) | |
uint->string | Integer.toUnsignedString(-1,radix) | 显示无符号整数结果 |
uint->二进制串 | Integer.toBinaryString(123) | |
uint->通用格式串 | String.format(“%d%x…”,…) |
2,字节数组读写short/int/long
类似c++中的字节指针读写short/int,(short)p,(int)p
又分为小端和大端模式,htonl,htons
代码存在于java.io.Bits和java.nio.Bits及java.nio.ByteBuffer,但前两者为私有类无法使用,ByteBuffer则要先wrap(byte[])创建对象不妥。
public class BytePtr {
public static short swap(short x) { return Short.reverseBytes(x); }
public static int swap(int x) { return Integer.reverseBytes(x); }
public static short htons(short x) { return Short.reverseBytes(x); }
public static int htonl(int x) { return Integer.reverseBytes(x); }
public static short makeShort(byte b1, byte b0) { return (short)((b1 << 8) | (b0 & 0xff)); }
public static int makeInt(byte b3,byte b2,byte b1,byte b0) {return (((b3 ) << 24) | ((b2 & 0xff) << 16) | ((b1 & 0xff) << 8) | ((b0 & 0xff) )); }
public static byte short1(short x) { return (byte)(x >> 8); }
public static byte short0(short x) { return (byte)(x ); }
public static byte int3(int x) { return (byte)(x >> 24); }
public static byte int2(int x) { return (byte)(x >> 16); }
public static byte int1(int x) { return (byte)(x >> 8); }
public static byte int0(int x) { return (byte)(x ); }
public static short getShortL(byte[] buf, int offset) { return makeShort(buf[offset+1] , buf[offset ]); }
public static short getShortB(byte[] buf, int offset) { return makeShort(buf[offset ] , buf[offset+1]); }
public static void putShortL(byte[] buf, int offset, short x) { buf[offset] = short0(x); buf[offset+1] = short1(x); }
public static void putShortB(byte[] buf, int offset, short x) { buf[offset] = short1(x); buf[offset+1] = short0(x); }
public static int getIntL(byte[] buf, int offset) { return makeInt(buf[offset+3],buf[offset+2],buf[offset+1],buf[offset ]); }
public static int getIntB(byte[] buf, int offset) { return makeInt(buf[offset ],buf[offset+1],buf[offset+2],buf[offset+3]); }
public static void putIntL(byte[] buf,int offset,int x) {buf[offset]=int0(x);buf[offset+1]=int1(x);buf[offset+2]=int2(x);buf[offset+3]=int3(x);}
public static void putIntB(byte[] buf,int offset,int x) {buf[offset]=int3(x);buf[offset+1]=int2(x);buf[offset+2]=int1(x);buf[offset+3]=int0(x);}
}
3,字节数组->字符串
Arrays.toString()
Array.asStream().map(String::toHexString).reduce(“”,String::concat))