Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VB.Net中将位写入二进制文件_Vb.net_Binary_Bit Manipulation_Binaryfiles - Fatal编程技术网

在VB.Net中将位写入二进制文件

在VB.Net中将位写入二进制文件,vb.net,binary,bit-manipulation,binaryfiles,Vb.net,Binary,Bit Manipulation,Binaryfiles,我需要创建一个包含二进制输入的文件,但当我这样做时,它将作为字节而不是位 例如,如果我想添加“apple”的二进制表示 它写入文件011000010111000001110000010110001100101,它包含40位 然而,当我看这个文件时,它显示了40字节,因为它将每一位都作为字符,所以它以字节方式保存。 如何防止这种情况并在VB.net中逐位保存所有信息 Dim fs As New FileStream("\binfile.bin", FileMode.Append) Dim

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

例如,如果我想添加“apple”的二进制表示 它写入文件011000010111000001110000010110001100101,它包含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()

非常感谢…

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

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字节供“apple”内部使用

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


参考资料:

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