【问题标题】:Byte array to signed Integer字节数组到有符号整数
【发布时间】:2023-01-07 07:47:15
【问题描述】:

我有以下一段代码,我试图理解它的作用。我知道从字节值中提取整数值,但我并不真正理解它的作用和工作原理:

public int decodeInt(byte[] input, int length) {
    int value = 0;
    int p = 0;
    int paddingPositions = 4 - length;
    for (int i = 0; i < 4; i++) {
        int shift = (4 - 1 - i) * 8;
        if (paddingPositions-- > 0) {
            value += (0 & 0x000000FF) << shift;
        } else {
            value += (input[p] & 0x000000FF) << shift;
            p++
        }
    }
    return value;
}

它似乎填充值以获得高位和低位并以某种方式将它们相加(移位步骤对我来说看起来很奇怪)。

【问题讨论】:

  • 你知道轮班操作员是做什么的吗?
  • 将所有位向一个方向移动给定的位数?
  • 为什么移位操作符看起来很奇怪?
  • value += (0 &amp; 0x000000FF) &lt;&lt; shift;value += 0 相同,因此是空操作。

标签: java byte


【解决方案1】:

我会称这个函数为keepFirstXBytes(...)。它似乎删除了 byte[] 的第一部分并将这些字节作为整数返回。

  • 如果你的输入是:{ 0x01, 0x02, 0x03 },而你的长度是2,那么它将只输出前 2 个字节。 0x0102

有一些注意事项。

  • 有趣的是,length 的最大值是 4。如果你取一个更长的值,那么它就好像是 4。它只取数组的前 4 个字节。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-18
    • 2016-11-19
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多