我在JAVA程序中使用charAt读取字符串,并把它转换成int型数组,可是当得到的int型数值大于128时就出问题

代码如下:
int[] a=new int[strTemp01.length()];
for(int i=0;i<strTemp01.length();i++)
{
a[i]=strTemp01.charAt(i);
}
从1-127都能读取正常,可是大于128就读到错误值,
例如本来传输的应该是128,结果得到一个65533的值
请问是什么原因,谢谢!

文字的编码问题而已。
传输的长度是128,你收到的是0-127 这128个字符是对着的。
65533 这个是GBK编码的问题,GBK为双字节编码,当字符串中有一个符号占用一个字节的话,用GBK编码后就会出现最后一位是单字节,这时系统会自动补上一个字节,这个补上的字节值就是65533。
你把字符串打印一下就能看出来,字符串有一部分是乱码。

某强人写的一段处理GBK字符的代码,试试看是不是字符串就正常了。

public boolean charCompare(byte[] str){
boolean bln=false;
int i=str.length-1;
int j=0;
System.out.println("File.charCompare() 【"+str[i]+"】");
if((str[i]>0&&str[i]<0x40)){
System.out.println("File.charCompare() 【标点】【"+str[i]+"】");
}else if((str[i]<0&&str[i]<-127)||str[i]>64){
System.out.println("File.charCompare() 【低字节】【"+str[i]+"】");
}else {
while(str[i-1]<0&&str[i-1]>-127){
System.out.println("File.charCompare() 【向前找】【"+str[i-1]+"】");
j++;
i--;
}
System.out.println("File.charCompare() 【找完】【"+str[i-1]+"】["+j+"]");
if(j%2==0)
return bln=true;
}
return bln;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-11-17
int是整型,取值范围在-128到127,超出127就会发生溢出
第2个回答  2012-11-22
溢出以后就会是65533
第3个回答  2012-11-17
溢出,如果想用可以将a声明成long类型
第4个回答  2012-11-17
能将strTemp01的内容贴出来吗??好是完整代码,这里看不出问题的

那个回答 int范围在 -128到127的朋友,,你知道什么是int吗?追问

我试着打印出strTemp01的内容,得到的东西没办法完全描绘,类似于
“◆ღ﹩ღ %”
我建立的socket通信,那边用的C++程序,传递无符号数组 大概一组数如“EF 01 65 01 0 67”
只要小于128的数都能够正确读出,上面的EF就不行了,直接得到的数是65533

追答

socket通信一边传的是数组,这边是字符串,这就不明白你是如何序列化数据的,不过估计是两边数据序列化不一致的问题导致某些数据会出现问题!

追问

传的时候是作为字符串传的,谢谢您的建议!!

第5个回答  2012-11-17
这与二进制有关的,研究一下二进制补码就知道了
相似回答