excelvba位控件

excelvba位控件,excel,vba,binary,binaryfiles,bit,Excel,Vba,Binary,Binaryfiles,Bit,在ExcelVBA中,我正在读写二进制文件 我想知道是否有可能代替仅仅改变字节来实际处理位。我的意思不是把每个字节转换成8位,我的意思是,如果可以使用位控制创建/修改/读取文件,例如,一个只有4位或10位的文件,而不是总是8的倍数 下面是我正在使用的一些代码: Private Sub WriteFile() Dim path As String, num As Byte, arr(2) As Byte path = "test.bin" arr(0) = CByte(&HA1

在ExcelVBA中,我正在读写二进制文件

我想知道是否有可能代替仅仅改变字节来实际处理位。我的意思不是把每个字节转换成8位,我的意思是,如果可以使用位控制创建/修改/读取文件,例如,一个只有4位或10位的文件,而不是总是8的倍数

下面是我正在使用的一些代码:

Private Sub WriteFile()
  Dim path As String, num As Byte, arr(2) As Byte
  path = "test.bin"
  arr(0) = CByte(&HA1)
  arr(1) = CByte(&HC4)
  arr(2) = CByte(&HA1)
  num = FreeFile
  If Dir(path) <> "" Then Kill path
  Open path For Binary Access Write As num
  Put num, , arr
  Close num
End Sub
Private子写文件()
Dim path作为字符串,num作为字节,arr(2)作为字节
path=“test.bin”
arr(0)=CByte(&HA1)
arr(1)=CByte(&HC4)
arr(2)=CByte(&HA1)
num=自由文件
如果目录(路径)“,则终止路径
二进制访问写为num的打开路径
放num,arr
关闭数值
端接头

问题是你为什么要这么做?我认为,由于文件的最小I/O单元是1字节(8位),因此您将始终需要写入1个完整字节

方法是生成一个位流并将其转换为字节(就在写入文件之前)

因此,更改一位的方法是读取1个完整字节,更改该字节中的位,然后将1个完整字节写回文件


无论如何,您都不会在磁盘上节省任何空间,因为您始终需要向磁盘写入一个完整扇区,通常1个扇区=512字节。因此,任何低于512字节的文件都将始终使用磁盘上完整的512字节。

如果这是正确的,那么这就回答了我的问题。我知道位不会有任何真正的区别,我只是想知道这是否可能,因为在我看到的所有二进制编辑器中,最小的单位都是十六进制或类似的字节。即使我检查一个文件的大小,也总是以字节为单位。我只是好奇地想知道我是否可以有一个1位而不是1字节的文件。谢谢。回答这个问题“…有一个1位而不是1字节的文件”:不,你不能。