Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функции для работы с byte[] 
V
    Опции темы
SickFxck
Дата 16.4.2010, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 16.4.2010

Репутация: нет
Всего: 1



Не подскажите набор функций для работы с массивом байт типа поиска вхождения подмассива в массив, замена подмассива на другой подмассив и т.п. То есть аналоги строковых функций в C для C-строк.
PM MAIL   Вверх
jonie
Дата 16.4.2010, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



ну небыстрые операции можно делать через linq2objects : http://msdn.microsoft.com/en-us/library/bb397919.aspx


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
SickFxck
Дата 16.4.2010, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 16.4.2010

Репутация: нет
Всего: 1



Хм... Я же рассматриваю массив байт как строку. Не совсем понимаю как LINQ тут поможет.

У меня данные из сокета считываются как byte[], а не string, отсюда и вопрос. Нужна такая же возможность найти в считанных данных какую-то подстроку, заменить её и т.п.
PM MAIL   Вверх
jonie
Дата 16.4.2010, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



SickFxck, в мире .net массив байт не тоже что строка. Более того, строки в .net сплошь и рядом в кодировке ucs-2 (юникод, почти что utf-16).

превратить в .net строку можно так
Код

var str = new System.Text.ASCIIEncoding().GetString(dataArrayOfBytes);



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
SickFxck
Дата 16.4.2010, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 16.4.2010

Репутация: нет
Всего: 1



Меня string не интересует. В общем, всем спасибо.
PM MAIL   Вверх
SickFxck
Дата 23.5.2010, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 16.4.2010

Репутация: нет
Всего: 1



Мне пришлось писать свой класс бинарной строки, кстати.

Код

    class BinaryString
    {
        private byte[] bs;

        public BinaryString()
        {
            this.bs = new byte[0];
        }

        public BinaryString(byte[] byteArray)
        {
            this.bs = byteArray;
        }

        public BinaryString(string s)
        {
            this.bs = Encoding.UTF8.GetBytes(s);
        }

        public int Length
        {
            get
            {
                return this.bs.Length;
            }
        }

        public byte this[int i]
        {
            get
            {
                return this.bs[i];
            }
        }

        public static BinaryString operator +(BinaryString bs1, BinaryString bs2)
        {
            byte[] byteArray = new byte[bs1.Length + bs2.Length];
            int j = 0;

            for (int i = 0; i < bs1.Length; i++, j++)
            {
                byteArray[j] = bs1[i];
            }

            for (int i = 0; i < bs2.Length; i++, j++)
            {
                byteArray[j] = bs2[i];
            }

            return new BinaryString(byteArray);
        }

        public static BinaryString operator +(BinaryString binaryString, byte[] byteArray)
        {
            return binaryString + new BinaryString(byteArray);
        }

        public override string ToString()
        {
            return new string(Encoding.UTF8.GetChars(this.bs));
        }

        public byte[] ToByteArray()
        {
            return (byte[])this.bs.Clone();
        }

        public BinaryString Substring(int startIndex, int length)
        {
            if (startIndex < 0)
            {
                startIndex = bs.Length + startIndex;
            }

            byte[] byteArray = new byte[length];

            for (int i = startIndex; i < length; i++)
            {
                byteArray[i - startIndex] = this.bs[i];
            }

            return new BinaryString(byteArray);
        }

        public BinaryString Substring(int startIndex)
        {
            return Substring(startIndex, bs.Length);
        }

        public int IndexOf(byte value, int startIndex)
        {
            for (int i = startIndex; i < this.Length; i++)
            {
                if (this[i] == value)
                {
                    return i;
                }
            }

            return -1;
        }

        public int IndexOf(byte value)
        {
            return IndexOf(value, 0);
        }

        public int IndexOf(BinaryString value, int startIndex)
        {
            bool success;

            for (int i = startIndex; i < this.Length - value.Length; i++)
            {
                success = true;

                for (int j = 0; j < value.Length; j++)
                {
                    if (this[i + j] != value[j])
                    {
                        success = false;
                        break;
                    }
                }

                if (success)
                {
                    return i;
                }
            }

            return -1;
        }

        public int IndexOf(BinaryString value)
        {
            return IndexOf(value, 0);
        }

        public BinaryString Replace(BinaryString oldValue, BinaryString newValue)
        {
            BinaryString result = new BinaryString();
            BinaryString source = new BinaryString(this.bs);

            int p;

            while ((p = source.IndexOf(oldValue)) >= 0)
            {
                result += source.Substring(0, p) + newValue;
                source = source.Substring(p + oldValue.Length);
            }

            result += source;

            return result;
        }
    }


Это сообщение отредактировал(а) SickFxck - 23.5.2010, 22:22
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0447 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.