short转换成byte[]时,数值为负,请高手帮我看看程序啊。

kaiyekai 2011-03-11 04:32:36
我需要把一个short数值A放到数组里,当A>255时,需要两个字节的数组。我发现b[1]的值为负,和我想象中的不一样。

public static void putShort(byte b[], short s, int index) {
b[index] = (byte) ((s >> 8) & 0xff);
b[index + 1] = (byte) ((s >> 0) & 0xff);
}
例如 A=1234
期望值为: b[0]=0x04, b[1]=0xD2
真实值为:b[0]=0x04, b[1]=0x-46

大家能不能帮我看看,这个程序怎么改啊,多谢了!
...全文
139 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
hjx398 2011-03-17
先与然后再移位
(s & 0xff)>>8
回复
scliuqiang 2011-03-17
[Quote=引用楼主 kaiyekai 的回复:]。

例如 A=1234
期望值为: b[0]=0x04, b[1]=0xD2
真实值为:b[0]=0x04, b[1]=0x-46
[/Quote]
这样无法实现的吧,如果A低八位的值超过了127,
取出低八位强转为byte符号位就为1,自然就是负值了
回复
magong 2011-03-12
这个程序没有错,不需要改。
byte中数值如果高位为1,记得打印的时候将高位置为0就OK了。
如下最后一行代码

byte b = (byte)0xD2;
System.out.println(b);
System.out.println(b&0x000000FF);
回复
ansensp 2011-03-12
进行右移操作的时 short将被提升为int
回复
相关推荐
发帖
J2ME
创建于2007-09-28

1.3w+

社区成员

Java J2ME
申请成为版主
帖子事件
创建了帖子
2011-03-11 04:32
社区公告
暂无公告