【发布时间】:2011-11-01 17:48:23
【问题描述】:
我有一个规范,它读取接下来的两个字节是有符号整数。
要在 java 中阅读,我有以下内容
当我使用以下代码在 java 中读取签名 int 时,我得到的值为 65449
无符号计算逻辑
int a =(byte[1] & 0xff) <<8
int b =(byte[0] & 0xff) <<0
int c = a+b
我认为这是错误的,因为如果 i 和 0xff 我得到一个无符号等价物
所以我删除了 & 0xff 和下面给出的逻辑
int a = byte[1] <<8
int b = byte[0] << 0
int c = a+b
which gives me the value -343
byte[1] =-1
byte[0]=-87
我试图用规范读取的方式来抵消这些值,但这看起来不对。因为堆的大小不属于这个。
在java中进行有符号整数计算的正确方法是什么?
规范是这样的
somespec() { xtype 8 uint8 xStyle 16 int16 }
xStyle :一个有符号整数,表示从 Widget() 结构的开头到 xStyle() 结构的开头的偏移量(以字节为单位),表示由页面小部件定义的继承样式以及专门应用于此小部件的样式.
【问题讨论】:
-
你能展示一个输入和期望结果的例子吗?不清楚..
-
我使用规范从流中读取。我根据规范读取了两个字节,当我在字节数组中读取转换为单个字节时的值是 byte[1]=-1 和 byte[0]=-87 说在包含两个字节的字节数组中。规范将这两个字节标记为有符号整数,我不知道正确的输出是什么。