我需要将 [-1,8,0,0] 之类的字节类型列表转换为 263 之类的 int ...尝试了这种方法
ByteBuffer.wrap(input).order(ByteOrder.LITTLE_ENDIAN).getInt()
只要输出 int 不超过 127,一切似乎都可以工作......之后会发生一些奇怪的事情,并且此方法开始返回奇怪的值,远远高于所需的值......
我需要将 [-1,8,0,0] 之类的字节类型列表转换为 263 之类的 int ...尝试了这种方法
ByteBuffer.wrap(input).order(ByteOrder.LITTLE_ENDIAN).getInt()
只要输出 int 不超过 127,一切似乎都可以工作......之后会发生一些奇怪的事情,并且此方法开始返回奇怪的值,远远高于所需的值......
为了让 TS 理解为什么在提供的数据下无法获得 263,我将写一个答案,以便有可能了解转换是如何发生的。
二进制数系统中整数的表示:
零是位,而不是字节!该位的值是
0
/1
(就像一个开/关按钮)二进制数字 255 的表示形式如下所示:
一个字节是整体的一部分:
当您将整体分成这样的 4 个部分时,您不必将这 4 个字节放在一起并获得原始数字。(
255 * 4 = 1 020
当范围uint32 = 4 294 967 295
)此外,可以说,当您从整体中取出 4 个字节时,即 将其拆分为 4 个字节,然后您需要将这些字节返回到该位置以获得原始数字(当字节混合时,结果将不是预期的),但这是使用移位完成的,即 您从最后开始填写并填写位字段,即:
接下来,当您填写前 8 位(
byte == 8 bit
)后,您需要减去24 - 8 == 16
AND 对第二个字节执行相同操作:第三个字节:
第四:
这是取回已分解为字节的整数的唯一方法。
鉴于您在问题中提供了以下信息: