Excel VBA 位控制
Excel VBA Bit Control
在ExcelVBA中,我在读写二进制文件。
我想知道是否有可能不只是更改字节来实际使用这些位。我的意思不是获取每个字节并将其转换为 8 位,我的意思是如果可以 create/modify/read 具有位控制的文件,例如,只有 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
那么问题是你为什么要这样做?我认为由于文件的最小 I/O 单位是 1 个字节(8 位),所以您总是需要写入 1 个完整字节。
方法是生成比特流并将其转换为字节(就在写入文件之前)。
因此更改一位的方法是读取 1 个完整字节更改该字节中的位并将 1 个完整字节写回文件。
无论如何您都不会在磁盘上保存任何 space,因为您总是需要将 1 个完整扇区写入磁盘,通常 1 个扇区 = 512 字节。因此任何小于 512 字节的文件将始终使用磁盘上的完整 512 字节。
在ExcelVBA中,我在读写二进制文件。
我想知道是否有可能不只是更改字节来实际使用这些位。我的意思不是获取每个字节并将其转换为 8 位,我的意思是如果可以 create/modify/read 具有位控制的文件,例如,只有 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
那么问题是你为什么要这样做?我认为由于文件的最小 I/O 单位是 1 个字节(8 位),所以您总是需要写入 1 个完整字节。
方法是生成比特流并将其转换为字节(就在写入文件之前)。
因此更改一位的方法是读取 1 个完整字节更改该字节中的位并将 1 个完整字节写回文件。
无论如何您都不会在磁盘上保存任何 space,因为您总是需要将 1 个完整扇区写入磁盘,通常 1 个扇区 = 512 字节。因此任何小于 512 字节的文件将始终使用磁盘上的完整 512 字节。