Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何拆分字节数组_C#_Bytearray - Fatal编程技术网

C# 如何拆分字节数组

C# 如何拆分字节数组,c#,bytearray,C#,Bytearray,这是一个简单的代码来分割一个字节数组,看看它是如何工作的。但问题是我得到了奇怪的输出 public static void SplitArayUsingLinq() { int i = 3; string data = "123456789"; byte[] largeBytes = Encoding .Unicode .GetBytes (data); byte[] first = largeBytes.Take

这是一个简单的代码来分割一个字节数组,看看它是如何工作的。但问题是我得到了奇怪的输出

    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时,我得到:


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

Unicode每个字符使用两个字节,因此只有
i
的偶数值可以工作,并且它将占用一半的字母数。如果您只想拆分一个字符串,那么这样做会容易得多

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每个字符使用两个字节,因此只有
i
的偶数值可以工作,它将占用一半的字母数。如果您只想拆分一个字符串,那么这样做会容易得多

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

    }

我刚把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);

    }

不,我不想拆线。我只是想看看字节数组是如何分割的,想看看“take()”和“skip()”是如何工作的。这就是为什么我的代码是这样的。无论如何谢谢。我建议用十六进制打印出
largeBytes
,这样你就可以理解发生了什么。@gili需要确保你知道,这不是魔术。UTF8每个字符使用一个字节。如果字符在标准ASCII集中,UTF8每个字符使用一个字节。只要你开始做
今日は它会再次崩溃。@ScottChamberlain,那么,现在汉字的解决方案是什么呢?我应该使用什么使任何字符都成为可能?不,我不想分割字符串。我只是想看看字节数组是如何分割的,想看看“take()”和“skip()”是如何工作的。这就是为什么我的代码是这样的。无论如何谢谢。我建议用十六进制打印出
largeBytes
,这样你就可以理解发生了什么。@gili需要确保你知道,这不是魔术。UTF8每个字符使用一个字节。如果字符在标准ASCII集中,UTF8每个字符使用一个字节。只要你开始做
今日は它会再次崩溃。@ScottChamberlain,那么,现在汉字的解决方案是什么呢?我应该用什么使任何角色都有可能?