gpt4 book ai didi

java - 以位表示形式打开文件并在 Java 中操作位

转载 作者:太空宇宙 更新时间:2023-11-04 11:16:48 24 4
gpt4 key购买 nike

我知道使用十六进制编辑器,可以编辑二进制文件并用每个十六进制值更改 4 位,但我正在考虑一个需要修改一位而不是 4 位的项目。

那么有没有办法以位读取某些内容(例如 ASCII 编码的纯文本文件)并操作单个位,例如Java?

作为菜鸟,我可以考虑加载每个字节并生成一个包含每个字节的每个 8 位表示形式的字符串,但这是一种相当复杂的方法,并且会浪费大量空间。另外,这种方法需要我保留一个包含每个可用字节的 8 位表示形式的列表来查找它。

最佳答案

其他人已经暗示您的问题很广泛,其他网站、资源或搜索可能可以更好地回答。

<小时/>

不过,我想向您展示一些您可以开始使用的小片段。

// Read a file into a byte array, we are not interested
// in interpreting encodings, just plain bytes
final byte[] fileContent = Files.readAllBytes(Paths.get("pathToMyFile"));

// Iterate the content and display one byte per line
for (final byte data : fileContent) {
// Convert to a regular 8-bit representation
System.out.println(Integer.toBinaryString(data & 255 | 256).substring(1));
}
<小时/>

您还可以通过简单地访问数组内容并使用简单的位运算符(如 &|^)轻松操作字节和位。

以下代码片段向您展示了如何在给定位置设置和取消设置位:

byte data = ...;

// Set it (to 1)
data = data | (1 << pos);

// Unset it (to 0)
data = data & ~(1 << pos);
<小时/>

此处解释了转换:how to get the binary values of the bytes stored in byte array
这里的位操作:Set specific bit in byte

以下是一些相关的 Java 文档:Files#readAllBytesInteger#toBinaryString

<小时/>

请注意,从效率的角度来看,Java 中可以使用的最小数据类型是 byte,没有 bit 数据类型。但实际上,您可能不会看到任何差异,CPU 已经将整个相邻位和字节加载到缓存中,无论您是否想要使用它们。因此,您可以只使用 byte 数据类型并使用它们来操作单个位。

关于java - 以位表示形式打开文件并在 Java 中操作位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45383982/

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