java c 转换_java和c通信相关的数据类型转换

本文详细介绍了在Java和C语言中如何进行字节与整数、字符串之间的转换,包括int转bytes、string转bytes、bytes转int、bytes转string的方法,并强调了在处理字节数组时需要注意的编码问题,特别是UTF-8与ISO-8859-1编码的区别。
摘要由CSDN通过智能技术生成

利用socket进行网络传输的时候往往需要将int转换为bytes,将string转换为bytes以及一些其他类型的数据转换

java和c类型的区别:

变量类型 C中字节数 Java中字节数char 1 2

byte 无    1

short 2 2

int 4 4

long 4 8

int 和bytes

int-bytes1:Integer.toString(intb).getBytes());2:public static void int2Bytes(int i, byte[] buf, intoffset) {

buf[offset]= (byte) i;

i>>= 8;

buf[offset+ 1] = (byte) i;

i>>= 8;

buf[offset+ 2] = (byte) i;

i>>= 8;

buf[offset+ 3] = (byte) i;

}

bytes-int

1:Integer.parseInt((bytes[] b).toString())2:private static int byte2Int(byte[] bs) {int retVal = 0;int len = bs.length < 4 ? bs.length : 4;for (int i = 0; i < len; i++) {

retVal|= (bs[i] & 0xFF) << ((i & 0x03) << 3);

}returnretVal;//如果确定足4位,可直接返回值//return (bs[0]&0xFF) | ((bs[1] & 0xFF)<<8) | ((bs[2] & 0xFF)<<16) | ((bs[3] & 0xFF)<<24);

}

int和String

int-String inti1:Integer.toString(i,xx); //xx为想要用什么进制来表示,缺省为10进制

2:i+" ";3:String.valueOf(i);//和1不同的是他可以转换的除了对象还可以为基本数据类型比如long boolean double//而且i可以为null但是1的i为null的话就会报错抛出异常

String-intString s1:Integer.parseInt(s)

bytes和String

String-bytes:(String a)1:a.getBytes(x);//x为指定的编码,缺省的话为utf-8//同一个字符串调用a.getBytes()两次并且分别打印,他们的内容会不同,调用一次返回的都是一个新的数组对像, 你打印的是对象引用的哈希码(不是对像里面的内容),//肯定是不一样的(因为每次返回都是一个新的变量).他们的内容是一样的.

2:(byte)a.charAt(i)

bytes-String :bytes[] b1:String a=new String(b,x);//x为指定的编码,缺省的话为utf-8

2:

StringBuffer sb=newStringBuffer();for(int i=0;i

sb.append((char)b[i]);

}

System.out.println(sb.toString());

特别注意编码问题:

1:

bytebytes[] = new byte[] { 50, 0, -1, 28, -24 };

String string = new String(bytes);

byte[] ret = string.getBytes();

查看ret的数据发现是50, 0, -17, -65, -67, 28, -17, -65, -67,发现数据并不是原来的数据。

而使用如下代码就可以得到原来的数据:

2:

bytebytes[] = new byte[] { 50, 0, -1, 28, -24 };

StringisoString = new String(bytes, "ISO-8859-1");

byte[] isoret = isoString.getBytes("ISO-8859-1");

第一种方法默认是用UTF-8编码来生成String的,用System.getProperty("sun.jnu.encoding")可以得到

Android默认编码是UTF-8。UTF-8是可变长度的编码,原来的字节数组就被改变了。而ISO8859-1通常叫做

Latin-1,Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符,其中 0~127的字符与ASCII码相同,

它是单字节的编码方式,这样第二种方式生成的String里的字节数组就跟原来的字节数组一样。在new String

使用其他编码如GBK,GB2312的话一样也会导致字节数组发生变化,因此要想获取String里单字节数组,就应该

使用iso8859-1编码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值