我在JAVA程序中使用charAt读取字符串,并把它转换成int型数组,可是当得到的int型数值大于128时就出问题 20
代码如下:int[]a=newint[strTemp01.length()];for(inti=0;i<strTemp01.length();i++){a[i]=strT...
代码如下:
int[] a=new int[strTemp01.length()];
for(int i=0;i<strTemp01.length();i++)
{
a[i]=strTemp01.charAt(i);
}
从1-127都能读取正常,可是大于128就读到错误值,
例如本来传输的应该是128,结果得到一个65533的值
请问是什么原因,谢谢! 展开
int[] a=new int[strTemp01.length()];
for(int i=0;i<strTemp01.length();i++)
{
a[i]=strTemp01.charAt(i);
}
从1-127都能读取正常,可是大于128就读到错误值,
例如本来传输的应该是128,结果得到一个65533的值
请问是什么原因,谢谢! 展开
6个回答
展开全部
文字的编码问题而已。
传输的长度是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;
}
传输的长度是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;
}
展开全部
int是整型,取值范围在-128到127,超出127就会发生溢出
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
溢出以后就会是65533
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
溢出,如果想用可以将a声明成long类型
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
能将strTemp01的内容贴出来吗??好是完整代码,这里看不出问题的
那个回答 int范围在 -128到127的朋友,,你知道什么是int吗?
那个回答 int范围在 -128到127的朋友,,你知道什么是int吗?
更多追问追答
追问
我试着打印出strTemp01的内容,得到的东西没办法完全描绘,类似于
“◆ღ﹩ღ %”
我建立的socket通信,那边用的C++程序,传递无符号数组 大概一组数如“EF 01 65 01 0 67”
只要小于128的数都能够正确读出,上面的EF就不行了,直接得到的数是65533
追答
socket通信一边传的是数组,这边是字符串,这就不明白你是如何序列化数据的,不过估计是两边数据序列化不一致的问题导致某些数据会出现问题!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这与二进制有关的,研究一下二进制补码就知道了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询