【问题标题】:How to convert BitSet -> short array with 4 bit precision?如何以 4 位精度转换 BitSet -> 短数组?
【发布时间】:2022-01-10 22:22:53
【问题描述】:

我想将可变长度的BitSet 数据转换为一个短裤数组。

BitSet -> short[]

bitset 的每四位应该用于构造一个新数字。

示例数据:

BitSet bits = new BitSet();

// 1101 = 13
bits.set(0, true);
bits.set(1, true);
bits.set(2, false);
bits.set(3, true);

// 0011 = 3
bits.set(4, false);
bits.set(5, false);
bits.set(6, true);
bits.set(7, true);
…

short[] numbers = …

【问题讨论】:

  • 你能解释一下为什么bits.toByteArray()对你不利吗?
  • 我需要这些数字进行进一步处理。使用字节将不起作用,因为它们将映射到 8 位。
  • 为什么要问多次? stackoverflow.com/questions/70658220/…
  • 你的位又倒退了。 1101 = 13
  • @Jotschi 你是对的!我很抱歉。重新打开。

标签: java bitset


【解决方案1】:

我想出了以下解决方案。将使用源的位填充一个新的位集,并且可以使用 toLongArray() 来返回值。

public static short toShort4Bit(BitSet bits, int offset) {
    BitSet bitset = new BitSet(4);
    for (int i = 0; i < 4; i++) {
        bitset.set(i, bits.get(offset+i));
    }
    return (short) bitset.toLongArray()[0];
}

【讨论】:

  • 为什么要复制到新的BitSet?为什么bitset.toByteArray()[0] 不够(我相信不需要强制转换为短)...如果您需要 4 位或可变长度,您没有回复...
  • 这将使用源位集的 8 位。在生成短数字时,我只想考虑接下来的 4 位。如果我使用bitset.toByteArray()[0],它将使用 8 位,这将返回一个不同的数字。
  • 我没想到会这样,所以将它移动 4 位:bitset.toByteArray()[0] &gt;&gt; 4,所以你会得到 8 中的 4...
  • 是的,可以。在我的测试中,我得到 00001101 作为字节,当转换为短时这是 -80。我需要 10110000 。字节顺序不匹配。有没有快速解决这个问题的方法?
  • 这将反转字节顺序,但不会反转单个字节中的位。我试过了。我现在选择了一条不涉及转换为短裤的不同路线。感谢您的努力。
猜你喜欢
  • 1970-01-01
  • 2012-01-26
  • 1970-01-01
  • 2012-01-08
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-18
相关资源
最近更新 更多