【问题标题】:Character Textfile to binary Textfile字符文本文件到二进制文本文件
【发布时间】:2013-04-19 05:17:48
【问题描述】:

我有一个包含一组记录的文本文件,我正在尝试将其转换并保存为 1 和 0 .. 每次我使用

Byte [] arr=Encoding.UTF8.GetBytes(recordss) ;

并使用字节写入器编写它,我仍然需要相同的记录文件,没有区别。

所以我的问题是有没有办法将字符串转换为二进制并以二进制格式将其写入文件。顺便说一句,我正在使用c#

这是我目前的代码

public static void serialData()
{
    FileStream recFile = new FileStream("Records.txt", FileMode.Open, FileAccess.ReadWrite);   //file to be used for records

    StreamReader recordRead = new StreamReader(recFile);

    String recordss = recordRead.ReadToEnd();        //Reads Record file

    recordRead.Close();
    recFile.Close();

    Byte [] arr=Encoding.UTF8.GetBytes(recordss) ;

    FileStream file = new FileStream("Temp.txt", FileMode.Create, FileAccess.Write);
    StreamWriter binfile = new StreamWriter(file);

    for(int i =0; i < arr.Count();i++)
        binfile.WriteLine(arr[i]);

    binfile.Close();
    file.Close();
}

【问题讨论】:

    标签: c# arrays binary ascii


    【解决方案1】:

    有一个内置函数可以将整数类型的值转换为二进制表示的字符串。换行试试

    binfile.WriteLine(arr[i]);
    

    这条线

    binfile.WriteLine(
        Convert.ToString(arr[i], 2)
    );
    

    Convert.ToString() 将输入转换为给定基数的表示。在这种情况下,您选择2 作为二进制表示的基础。其他常用值是 8 八进制或 16 十六进制。

    【讨论】:

    • 我只是想问一下,但是从文件中读取时如何转换回来
    • @MohamedAbdelfattah 看看this answer,例如。
    • 谢谢你终于得到了工作的代码..你有一个美好的一天和一个美好的周末:-)
    • 不客气。但请注意,您的 CAPS LOCK 键似乎卡住了 :)
    【解决方案2】:

    您的结果采用“字节”格式。总是。根据定义,它是数据。您“看到”它的方式取决于您用来打开它的软件。

    您想要的可能是在文本编辑器中打开时“显示”原始数据源的底层二进制数据的文件:作为文本。为此,您必须在文件中写入字符“0”和“1”。因此,最终文件将比原始数据源大很多。

    更改此代码:

    for(int i =0; i < arr.Count();i++)
        binfile.WriteLine(arr[i]);
    

    进入这个:

    foreach (byte b in arr)
    {
        binfile.Write((b >> 7 & 1) == 0 ? '0' : '1');
        binfile.Write((b >> 6 & 1) == 0 ? '0' : '1');
        binfile.Write((b >> 5 & 1) == 0 ? '0' : '1');
        binfile.Write((b >> 4 & 1) == 0 ? '0' : '1');
        binfile.Write((b >> 3 & 1) == 0 ? '0' : '1');
        binfile.Write((b >> 2 & 1) == 0 ? '0' : '1');
        binfile.Write((b >> 1 & 1) == 0 ? '0' : '1');
        binfile.Write((b & 1) == 0 ? '0' : '1');
    }
    

    但这有点难看。最好使用十六进制文件查看器。

    【讨论】:

    • 谢谢,但我的文件中只有 1,而且我有大约 7 条记录,他们不会只给我那个
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 2011-02-28
    • 2016-08-30
    相关资源
    最近更新 更多