1、类型转换
(1)byte转int(int可转为long、double、float)
//Byte转int
public static int byteToInt(byte[] data,int offset)
{
int result = 0;
int n1,n2,n3,n4;
n1 = data[offset+3] & 0xFF;
n2 = data[offset+2] & 0xFF;
n3 = data[offset+1] & 0xFF;
n4 = data[offset] & 0xFF;
result = n1 << 24 | n2 << 16 | n3 << 8 | n4;
return result;
}
(2)byte转Hex
//byte转Hex
public static String byteToHex(byte[] b)
{
char HEX_DIGITS[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
StringBuilder stringBuilder = new StringBuilder(b.length * 2);
for(int i = 0; i < b.length; i++)
{
stringBuilder.append(HEX_DIGITS[(b[i] & 0xf0) >> 4]);
stringBuilder.append(HEX_DIGITS[b[i] & 0x0f]);
}
return stringBuilder.toString();
}
(3)HexString转long
//HexString转long
public static long hexStringtoLong(String s)
{
String serial = "0123456789ABCDEF";
s = s.trim().toUpperCase();
if(s.length() > 8)
return 0;
long num = 0;
int len = s.length();
for(int i = 0 ; i < len; i++)
{
num += (serial.indexOf(s.charAt(i)) << (4*(len - i - 1)));
}
return num;
}
2、Unicode编码
Unicode(统一码、万国码、单一码):是一种在计算机平台上使用的字符编码,他为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足夸语言、夸平台进行文本转换、处理的要求。
(1)byte[]是字节数组类型,和init[]类似,只是一个是字节类型,一个是整形的;
(2)char是UNICODE字符,为16位的整数;
(3)String是一个类,一般用来表示字符串;
(4)hello.getBytes()意思是把hello这个字符串转化为字节流(byte类型);一般而言,前面加个byte[]型变量,把转换后的字节流放在这个变量里,如:byte[] bytes = hello.getBytes();
1)Char转为byte
//char转为byte
private byte[] getBytes(char[] chars)
{
Charset cs = Charset.forName("UTF-8");
CharBuffer cb = CharBuffer.allocate(chars.length);
cb.put(chars);
cb.filp();
ByteBuffer bb = cs.encode(cb);
return bb.array();
}
2)byte转为Char
//byte转char
private char[] getChars(byte[] bytes)
{
Charset cs = Charset.forName("UTF-8");
ByteBuffer bb = ByteBuffer.allocate(bytes.length);
bb.put(bytes);
bb.filp();
CharBuffer cb = cs.decode(bb);
return cb.array();
}
3)string转为byte[]
//string转byte[]
//改为UTF8编码
byte[] bytes = strString.getBytes("UTF8");
//改为ISO-8859-1编码
byte[] isoret = strString.getBytes("ISO-8859-1");
4)byte[]转为string
//byte转string
String strString = new String(bytes,"ISO-8859-1");
String strString = new String(bytes,"UTF-8");
3、使用说明
在网络传输或其他应用中常常有同一的中间件,假设为string类型,因此需要把其它类型的数据转换为中间件的类型。
将字符串进行网络传输时,如socket,需将其在转为byte[]类型,这中间如果采用不同的编码可能会出现乱码。
用socket传输string类型的数据时,常常用UTF-8进行编码,这样比较可以避免一个中文乱码现象。
发送端:
String sendString = “发送数据”;
byte[] sendBytes = sendString.getBytes("UTF8");
发送sendBytes数据
接收端:
String recString = new String(sendBytes,"UTF-8");
此处会出现另一个问题,如果发送的数据本身就是byte[]类型,然后将其通过UTF-8编码转换为中间件String类型就会出现问题。
如:
byte[] bytes = new byte[] { 50, 0, -1, 28, -24 };
String sendString = new String( bytes ,"UTF-8");
byte[] sendBytes = sendString.getBytes("UTF8");
然后发送数据,接收时进行逆向转换
String recString=new String( sendBytes ,"UTF-8");
byte[] Mybytes=isoString.getBytes("UTF8");
得到的数据为[50,0,-17,-65,-67,28,-17,-65,-67]。因此,需要采用单字节的编码方式进行转换
String sendString=new String( bytes ,"UTF-8"); 改为 String sendString=new String( bytes ,"ISO-8859-1" );
byte[] Mybytes=isoString.getBytes("UTF8"); 改为 byte[] Mybytes=isoString.getBytes( "ISO-8859-1" );