[英]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
取決於操作系統類型 ,這是Linux
, Macintosh
和Windows
標記。
但是,如果你說你的文件是二進制的,你知道他們的內容中有ASCII換行符嗎?
如果這是二進制文件,這可能是一個結構 ,如果這樣他們在刪除換行符之后構造你,則在該換行符之后向左移動所有數據並損壞她的數據 。
我會想象刪除二進制塊中的字節,這些字節對應於換行實際上會破壞二進制數據,從而使其無用。
也許你最好使用base64編碼,這將產生ASCII安全輸出。
如果這是文本數據,則將其作為文本數據加載(使用正確的編碼),將其替換為字符串,然后重新編碼(使用正確的編碼)。 對於某些編碼,您可以在文件級別進行交換(不進行解碼/編碼),但我不打賭。
如果這是任何其他二進制表示,您將必須知道確切的詳細信息。 例如,嵌入在二進制文件的一部分中的字符串具有長度前綴是常見的(但不是確定的)。 如果在不更改長度前綴的情況下更改數據,則只會損壞文件。 要更改長度前綴,您需要知道格式(它可能是big-endian / little-endian,任何固定數量的字節,或者前綴本身可能是可變長度)。 或者它可能是分隔的。 或者可能存在分散在文件中的所有需要修復的相對偏移。
同樣可能; 你可能偶然在二進制文件中有相同的字節序列, 不代表換行符; 你可能會完全破壞數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.