如何拆分字节数组

时间:2014-05-19 20:27:31

标签: c# bytearray

它是一个简单的代码,用于分割字节数组并查看其工作原理。但问题是我得到了奇怪的输出。

    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的值时,我得到了这个:

enter image description here

当i = 4的值时,我得到了这个:

enter image description here

在这两种情况下,我都会得到奇怪的输出。似乎无论i的价值如何,该程序似乎都考虑了它的一半。谁能告诉我为什么会这样?究竟在哪里出问题?

2 个答案:

答案 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);

    }