簡體   English   中英

C#將byte []轉換為string []

[英]C# convert byte[] to string[]

我正在用C#編碼,並願意使用不安全/已修復。

我希望能夠從byte []轉換為string []。 我從一個字符串文件開始(以\\ n終止)。 我從文件中讀取的字節數組中的所有\\ n都替換為\\ 0。 我想我現在可能只是將byte []重新解釋為字符串[],因為換行符現在為\\ 0s。 我認為這是有道理的,但我可能是錯的。 如果我從C ++回憶起(不幸的是幾十年前),string []只是一個char [] [],其中每個內部char []均以null終止。 因此,我認為下面的代碼可以(如果執行fancycast)可以工作。

//文件的每一行都包含字符串

byte[] bytes = ReadFile();
Replace(bytes, '\n', \0');
string[] strings = (fancycast)bytes

我不知道該怎么做。 非常感謝你。

我了解C#中的所有Streams和Readers,並且有不使用它們的特定原因。 請不要建議其他設計。 我只想重新解釋轉換數組。 謝謝您的幫助。

C#使用PASCAL字符串,而不是C字符串。 最好的選擇是將\\n字符保留下來並執行Split()。

byte[] bytes = ReadFile();
string oneBigString = Encoding.ASCII.GetString(bytes);
string[] lines = oneBigString.Split('\n');

如果您只想讀取C#文件,則可以使用:

string text = System.IO.File.ReadAllText("PathToFile");

要么

string[] lines = System.IO.File.ReadAllLines("PathToFile");

否則,只需從字節創建一個字符串並拆分字符串:

bytes[] = ReadFile();
string allData = System.Text.Encoding.<Encoding>.GetString(result);
string[] lines = allData.Split('\n');

嘗試

System.Text.Encoding.Default.GetString(bytes);

但是,您不必將文件讀取為字節數組,然后在C#中將其轉換為字符串數組。 相反,您可以分別使用ReadAllText(path)或ReadAllLines(path)直接讀取為字符串/字符串數組。

string allText = File.ReadAllText("file path");
string[] allLines = File.ReadAllLines("file path");

關於C#字符串,有一件非常重要的事情要知道:它們是Unicode字符的不可變序列,這是您可以說的唯一真正確定的事情。 因此,您不能假設任何一個字符的大小,也不能假設字符串中任何字符的字節偏移。

好吧,您可以做一些假設,並且在大多數情況下它可能會起作用,但是當它不起作用時,調試將非常痛苦。

Unicode字符可能需要8、16或32位。 C#對字符串使用UTF-16編碼,這意味着字符串中的字符至少為16位。 32位字符是Unicode規范的一部分(例如:表情符號傾向於存在於32位空間中,例如0x1F44C:👌),並且C#不保證結果字符串如何在內存中布置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM