8、常用Android类型转换

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" );



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值