它是一个简单的代码,用于分割字节数组并查看其工作原理。但问题是我得到了奇怪的输出。
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);
}
当i = 3的值时,我得到了这个:
当i = 4的值时,我得到了这个:
在这两种情况下,我都会得到奇怪的输出。似乎无论i的价值如何,该程序似乎都考虑了它的一半。谁能告诉我为什么会这样?究竟在哪里出问题?
答案 0 :(得分:4)
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);
答案 1 :(得分:0)
我刚刚将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);
}