gpt4 book ai didi

java - 将 BitSet 或 boolean 数组从 Java 序列化到 Base64 再到 Python

转载 作者:行者123 更新时间:2023-11-30 06:01:01 26 4
gpt4 key购买 nike

我需要通过文本文件将大型 boolean 数组或位集从 Java 转换为 Python。理想情况下,我想通过 Base64 表示来保持紧凑,但仍然能够将值嵌入到 CSV 文件中。 (因此 boolean 数组将是 CSV 文件中的一列。)

但是我在正确对齐字节时遇到问题。我应该在哪里/如何指定正确的字节顺序?

这是一个示例,在执行时起作用,但在我的位不在我想要的位置时不起作用。

Java:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.util.Base64;
import java.util.Base64.Encoder;
import java.util.BitSet;

public class basictest {

public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Encoder b64 = Base64.getEncoder();
String name = "name";
BitSet b = new BitSet();
b.set(444);
b.set(777);
b.set(555);
byte[] bBytes = b.toByteArray();
String fp_str = b64.encodeToString(bBytes);
BufferedWriter w = new BufferedWriter(new FileWriter("out.tsv"));
w.write(name + "\t" + fp_str + "\n");
w.close();
}

}

Python:

import numpy as np
import base64
from bitstring import BitArray, BitStream ,ConstBitStream
filename = "out.tsv"
with open(filename) as file:
data = file.readline().split('\t')
b_b64 = data[1]
b_bytes = base64.b64decode(b_b64)
b_bits = BitArray(bytes=b_bytes)

b_bits[444] # False
b_bits[555] # False
b_bits[777] # False
# but
b_bits[556] # True
# it's not shifted:
b_bits[445] # False

最佳答案

我现在使用 https://stackoverflow.com/a/5333563/1259675 反转每个字节中的位:

numbits = 8
r_bytes = [
sum(1<<(numbits-1-i) for i in range(numbits) if b>>i&1)
for b in b_bytes]
b_bits = BitArray(r_bytes)

这可行,但是有没有一种方法不需要我自己摆弄这些位?

关于java - 将 BitSet 或 boolean 数组从 Java 序列化到 Base64 再到 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52276360/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com