Как разбить массив байтов

1

его простой код для разделения массива байтов и посмотреть, как он работает. Но проблема в том, что я получаю странные результаты.

    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, я получаю следующее:

Изображение 174551

и когда значение я = 4, я получаю следующее:

Изображение 174551

В обоих случаях я получаю странные результаты. Кажется, что независимо от значения i, программа, кажется, рассматривает свою половину. Может ли кто-нибудь сказать мне, почему это происходит? где именно проблема?

Теги:
bytearray

2 ответа

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);
  • 0
    понял, что вы имеете в виду. Спасибо...
  • 0
    нет, я не хочу разбивать строку. Я просто хочу посмотреть, как разбивается массив байтов, и хочу посмотреть, как работают "take ()" и "skip ()". вот почему мой код таков. Спасибо, в любом случае.
Показать ещё 6 комментариев
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);

    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню