Строка STL C++ eqivalent для Двоичных данных

Я нашел ответ на свой вопрос:

, чтобы избавиться от BeginInvoke и сохранить функциональность, как было задумано в исходном коде, мне пришлось переписать это:

private void SearchDevicesEvent(object sender,
                                        ClassListOfDevices.EventSearchDevicesArg e)
        {
            BeginInvoke(new ClassListOfDevices.SearchDevicesEventHandler(UpdataSearchDevicesEvent),
                        new[] { sender, e });
        }
[114 ] в это:

private void SearchDevicesEvent(object sender,
                                        ClassListOfDevices.EventSearchDevicesArg e)
        {
            UpdataSearchDevicesEvent(object sender,
                                        ClassListOfDevices.EventSearchDevicesArg e)
                { //do stuff.... }
        }
28
задан lothar 8 May 2009 в 02:12
поделиться

3 ответа

Я бы использовал std :: vector . Большинство необходимых вам операций можно выполнить с использованием STL с диапазонами итераторов. Также помните, что если вам действительно нужны необработанные данные, то & v [0] гарантированно даст указатель на базовый массив.

38
ответ дан 28 November 2019 в 02:32
поделиться

Вы можете использовать std :: string также для двоичных данных. Длина данных в std :: string хранится явно и не определяется нулевым завершением, поэтому нулевые байты не имеют специального значения в std :: string .

std :: string часто более удобен, чем std :: vector , поскольку он предоставляет много методов, которые полезны для работы с двоичными данными, но не предоставлены вектором . Для разбора / создания двоичных данных полезно иметь такие вещи, как substr () , перегрузки для + и std :: stringstream . Для векторов алгоритмы из <алгоритм> могут быть использованы для достижения тех же эффектов, но они более неуклюжи, чем строковые методы.

24
ответ дан 28 November 2019 в 02:32
поделиться

Вы должны использовать std :: vector или std :: vector (если у вас современный заголовок stdint.h ). Нет ничего плохого в использовании unsigned char [] или uint8_t [] , если вы работаете с буферами фиксированного размера. Когда std :: vector действительно сияет, это когда вам нужно часто увеличиваться или добавлять свои буферы. Итераторы STL имеют ту же семантику, что и указатели, поэтому алгоритмы STL будут одинаково хорошо работать с std :: vector и простыми старыми массивами.

И, как указал CAdaker, выражение & v [0] гарантированно даст вам базовый указатель на буфер вектора (и он гарантированно будет одним непрерывным блоком памяти).

21
ответ дан 28 November 2019 в 02:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: