его простой код для разделения массива байтов и посмотреть, как он работает. Но проблема в том, что я получаю странные результаты.
public static void SplitArayUsingLinq()
{
int i = 3;
string data = "123456789";
byte[] largeBytes = Encoding .Unicode .GetBytes (data);
byte[] first = largeBytes.Take(i).ToArray();
byte[] second = largeBytes.Skip(i).ToArray();
string firststring = Encoding.Unicode .GetString (first);
string secondstring = Encoding.Unicode.GetString(second);
Console.WriteLine(" first : " +firststring);
Console.WriteLine(" second : " +secondstring);
}
когда значение я = 3, я получаю следующее:
и когда значение я = 4, я получаю следующее:
В обоих случаях я получаю странные результаты. Кажется, что независимо от значения i, программа, кажется, рассматривает свою половину. Может ли кто-нибудь сказать мне, почему это происходит? где именно проблема?
Unicode использует два байта на символ, поэтому только четные значения i
будут работать, и это займет половину числа букв. Если вы просто хотите разбить строку, в которой String.SubString
будет намного проще.
int i = 3;
string data = "123456789";
string firststring = data.SubString(0,i);
string secondstring = data.SubString(i+1);
Console.WriteLine(" first : " +firststring);
Console.WriteLine(" second : " +secondstring);
Я просто изменил Unicode на UTF8, и проблема решена. Спасибо всем, кто ответил и прокомментировал.
ОБНОВИТЬ:
правильный код:
public static void SplitArayUsingLinq()
{
int i = 3;
string data = "123456789";
byte[] largeBytes = Encoding.UTF8.GetBytes (data);
byte[] first = largeBytes.Take(i).ToArray();
byte[] second = largeBytes.Skip(i).ToArray();
string firststring = Encoding.UTF8.GetString (first);
string secondstring = Encoding.UTF8.GetString(second);
Console.WriteLine(" first : " +firststring);
Console.WriteLine(" second : " +secondstring);
}