【问题标题】:Writing Bits into Binary File in VB.Net在 VB.Net 中将位写入二进制文件
【发布时间】:2013-04-08 09:09:20
【问题描述】:

我需要创建一个包含二进制输入的文件,但是当我这样做时,它需要作为字节而不是位

例如,如果我想添加“苹果”的二进制表示 它写入文件 0110000101110000011100000110110001100101 它包含 40 位 但是,当我查看文件时,它显示 40 字节,因为它将每一位都作为字符,因此它按字节保存。 我怎样才能防止这种情况并在 VB.net 中按位保存所有信息?

Dim fs As New FileStream("\binfile.bin", FileMode.Append)
    Dim bw As New BinaryWriter(fs)
    Dim TempStr As String

    For t As Integer = 0 To Nameoftable.Length - 1
        Dim bin As String = _
            LongToBinary(Asc(Nameoftable.Substring(t, 1))) 'BIT CONVERTER FUNCTION
        TempStr &= bin.Substring(bin.Length - 8)
    Next t

        bw.Write(TempStr)

    bw.Close()

非常感谢...

【问题讨论】:

  • 好吧,不要使用 LongToBinary()。目前尚不清楚你为什么这样做。如果你想要字节,那么 StreamWriter 就可以了。
  • 我使用 LongToBinary 函数,因为我需要将数据保存为二进制,因为在记录的某些部分我使用散列和需要的按位部分.. 例如,我需要数据的第一位状态和休息后在这种情况下,我需要按位记录数据。真正的问题是即使我将所有字符串、整数更改为二进制格式,它也会以 char 形式写入 .bin 文件中。我该如何防止这种情况发生?
  • 此外,我只是尝试 streamwriter,这与 mycase 的 binarywriter 几乎相同。我需要按位写入 .. 例如,如果我将 5 位添加到 bin 文件中,它必须增长 5 位而不5 个字节..

标签: vb.net binary bit-manipulation binaryfiles


【解决方案1】:

您必须使用 BINARY 读取器/写入器对象,并指定发送到写入流的数据的字段类型,读取器中从流中读取的数据也是如此。

Dim filename As String = "c:\temp\binfile.bin"
Dim writer As BinaryWriter
Dim reader As BinaryReader
Dim tmpStringData As String
Dim tmpByteData As Byte
Dim tmpCharData As Char
Dim tempIntData as Integer
Dim tempBoolData as Boolean
'
writer = New BinaryWriter(File.Open(filename, FileMode.Append))
Using writer
  writer.Write("apple")
  'writer.Write(YourByteDataHere)   'byte
  'writer.Write(YourCharHere)   'char
  'writer.Write(1.31459)        'single
  'writer.Write(100)        'integer
  'writer.Write(False)        'boolean
End Using
writer.Close()
'
If (File.Exists(filename)) Then
  reader = New BinaryReader(File.Open(filename, FileMode.Open))
  Using reader
    tmpStringData = reader.ReadString()
    'tempByteData = reader.ReadByte()
    'tempCharData = reader.ReadChar()
    'tempSingleData = reader.ReadSingle()
    'tempIntData = reader.ReadInt32()
    'tempBoolData = reader.ReadBoolean()
  End Using
  reader.Close()
End If

我使用 ReadString() 方法来写字符串“apple” 如果您愿意,可以将 chr 代码用于字符或字节,在这种情况下,您必须使用 ReadByte() 或 ReadChar() 或 ReadInt(),具体取决于您将其发送到流的方式(作为字节、字符或整数)

所以文件大小为 6 字节,1 供文件流处理程序内部使用,5 字节供您的“苹果”使用

如果你将它保存为 char 或 byte 我会认为它使用了 5 个字节和 1k 长 如果你将它保存为整数,我会认为它使用了 10 个字节和 1k 长

参考:http://msdn.microsoft.com/en-us/library/system.io.binarywriter.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 2020-10-30
    相关资源
    最近更新 更多