繁体   English   中英

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

[英]C# How can i remove newline characters from binary?

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

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

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

然后删除换行符

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

但它不起作用?

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

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

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

新行字符可能是\\n\\r \\n\\r \\r\\n 取决于操作系统类型 ,这是LinuxMacintoshWindows标记。

但是,如果你说你的文件是二进制的,你知道他们的内容中有ASCII换行符吗?

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM