我有一个包含一组记录的文本文件,我试图转换并将其保存为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();
}
答案 0 :(得分:1)
有一个内置函数可以将整数类型值转换为具有二进制表示形式的字符串。尝试更换行
binfile.WriteLine(arr[i]);
通过这一行
binfile.WriteLine(
Convert.ToString(arr[i], 2)
);
Convert.ToString()
会将输入转换为给定基础中的表示。在这种情况下,您选择2
作为二进制表示的基础。对于八进制,其他常见值为8
,对于十六进制,则为16
。
答案 1 :(得分:0)
您的结果是'byte'格式。总是。根据定义,它是数据。你看到它的方式取决于你用来打开它的软件。
您想要的可能是在文本编辑器中打开时“显示”原始数据源的基础二进制数据的文件: as 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');
}
但它有点难看。最好使用十六进制文件查看器。