C#如何从二进制文件中删除换行符?

时间:2010-06-01 10:29:42

标签: c#

基本上我有二进制数据,我不介意它是不可读的但我把它写入一个被解析的文件,所以重要的是取出换行符。

当我转换成字符串时,我以为我做了正确的事....

byte[] b = (byte[])SubKey.GetValue(v[i]);
s = System.Text.ASCIIEncoding.ASCII.GetString(b);

然后删除换行符

String t = s.replace("\n","")

但它不起作用?

5 个答案:

答案 0 :(得分:6)

换行符可能是\ r \ n,您的二进制数据可能不是ASCII编码。

答案 1 :(得分:0)

首先换行符(Environment.Newline)在Windows上通常是两个字符,你的意思是删除单个回车符或换行符吗?

其次,将文本编码应用于二进制数据可能会导致意外转换。例如。购买未映​​射到ASCII字符的二进制数据会发生什么?

答案 2 :(得分:0)

换行符可能是\n\r\r\n 取决于操作系统类型,这是Linux的标记, MacintoshWindows

但是如果你说你的文件是二进制的,你知道他们在她的内容中有的新行

如果这是二进制文件,这个可能是某个结构,如果这样他们在删除换行符后构建你在这个换行符之后向左移动所有数据并损坏她的数据

答案 3 :(得分:0)

我会想象删除二进制块中的字节,这些字节对应于换行实际上会破坏二进制数据,从而使它无用。

也许你最好使用base64编码,这将产生ASCII安全输出。

答案 4 :(得分:0)

如果这是文本数据,则将其作为文本数据加载(使用正确的编码),将其替换为字符串,然后重新编码(使用正确的编码)。对于某些编码,您可以在文件级别进行交换(不进行解码/编码),但我不打赌它。

如果这是任何其他二进制表示,您将拥有以了解确切的详细信息。例如,嵌入在二进制文件的一部分中的字符串具有长度前缀是常见的(但不是确定的)。如果在不更改长度前缀的情况下更改数据,则只会损坏文件。要更改长度前缀,您需要知道格式(它可能是big-endian / little-endian,任何固定数量的字节,或者前缀本身可能是可变长度)。或者它可能是分隔的。或者可能存在分散在文件中的所有需要​​修复的相对偏移。

同样可能;你可以偶然在二进制文件中具有相同的字节序列,代表换行符;你可能完全无视数据。