我在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
这与二进制有关的,研究一下二进制补码就知道了

我在JAVA程序中使用charAt读取字符串,并把它转换成int型数组,可是当...
某强人写的一段处理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.charC...

java中 如何将char类型转换成string
对于将String转换为char,Java提供了更直接的方法:1. charAt()方法: `char c = s.charAt(index);` 可以获取字符串中指定位置的字符,index为0开始的索引。2. toCharArray()方法: `char[] charArray = s.toCharArray();` 将整个字符串转换为字符数组,方便访问每个字符。

java中charat是什么意思
在Java中,charat是一个string类的方法之一,用于获取特定位置上字符的值。例如,如果输入字符串为“Java”,那么charat(0)将返回“J”,charat(1)将返回“A”,以此类推。可以将charat方法与其他string处理方法(如substring和length)结合使用,以便在字符串中查找和操作特定字符。charat方法可以用于检查...

Java进阶:Java变量类型之间的相互转换
现在我们还剩下一个字符型变量 事实上String类可以理解为一个char型数组 因此我们可以在String类中找到这样的方法来实现这种转换 charAt(int index)可以得到String类中某一位置上的字符 toCharArray()更可以将整个String类转换成一个char的数组 对于所有的包装类都存在一个名为toString()的方法可以将其转换...

怎样把string类型转换成int类型
} 第一种办法:通过charAt(i),把字符串的每位变成char型,然后用当前字符减去字符0(temp_char-'0'),得到当前字符的int值。第二种办法:把字符再转成字符串,然后再强制转换成int型。2、把字符串拆分成一位一位的 第一种方法:循环后charAt(i);注意:charAt(i)得到的是字符串对应的每位字符...

java里,如何把String字符串转换成int[]数组?
String table_id="1,2,3,11,20,100"String[] str=table_id.split(,)\/\/以,进行拆分,获得字符串数组 在对每个字符串Integer.parseInt(String s);

Java语言中,如何将String转化成Int数组
public int[] parse(String str) { int length = str.length();int[] result = new int[length];\/\/ 依次取得字符串中的每一个字符,并将其转化为数字,放进int数组中 for (int i = 0; i < length; i++) { char c = str.charAt(i);result[i] = Character.getNumericValue(c);} ...

java charAt使用问题
charAt()的方法返回值是char类型的值,你不能将值赋给值,要赋个一个变量啊,另外你循环也有问题:for(int j=s.length-1;j>=i;j++),这样肯定不行。改后如下:import java.io.BufferedReader;import java.io.FileReader;import java.io.BufferedWriter;import java.io.FileWriter;import java.io....

java中 如何将char类型转换成string 类型
1,String str=String.valueOf('[字符]'); \/\/直接传参法 2,char data={'a','b','c'};String str=new String(data);\/\/通过new对象的方式强制转换 3,char ch = 'U';String fromChar = new String(new char[]{ch});\/\/使用匿名数组,java中的匿名数组可以被用来封装一个单独的字符到...

java 关于将字符串转换成数组有点疑问?
我们知道,数字0的ascii码是48,1的是49……这样,你得到的char转换成int类型的是ascii码,比如 s="123";那么money[0]='1'-48=49-48=1 它的目的就是求到和它字面一样的值来。

相似回答