1

我有一个包含一组记录的文本文件,我正在尝试将其转换并保存为 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();
}
4

2 回答 2

1

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

binfile.WriteLine(arr[i]);

通过这条线

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

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

于 2013-04-25T11:15:58.147 回答
0

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

您想要的可能是在文本编辑器中打开时“显示”原始数据源的底层二进制数据的文件:作为 text。为此,您必须在文件中写入字符“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');
}

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

于 2013-04-25T10:51:27.990 回答