这段程序怎么造成会出界阿?(short类型转成byte[2])
short st = -27995;
byte[] stBt = new byte[2];
st2Bt = ShortToBytes.shortTo(st2);
//此处溢出
请问是为什么?short to byte[2]转换如下
public class ShortToBytes {
public static byte[] shortTo(short s) {
byte[] buf = new byte[2];
int pos;
for (pos = 0 ; pos < 2 ; pos++) {
buf[pos] = (byte) (s & 0xff);
s >>= 8;
if (s == 0) break;
}
byte[] rt = new byte[pos + 1];
for (int j = 0 ; j <= pos ; j++) {
rt[j] = buf[j];
}
return rt;
}
}
问题点数:20、回复次数:3Top
1 楼keios(C->C++->java->C 循环中)回复于 2002-04-17 14:49:27 得分 5
buf长度是2,而rt的长度可能是3?
莫非是有符号移位高位补1?
Top
2 楼alphazhao(迷路飞羊)回复于 2002-04-17 14:53:01 得分 0
short类型不是2个字节么?
我一个一个字节取出来,应该不会溢出阿
Top
3 楼knight_qmh(辉)回复于 2002-04-17 15:29:28 得分 15
public class ShortToBytes {
public static byte[] shortTo(short s) {
byte[] buf = new byte[2];
buf[0] = (byte)((s >>> 8) & 0xFF);
buf[1] = (byte)(s & 0xFF);
return buf;
}
}
Top




