Использование QBuffer для двоичных данных

#c #qt

#c #qt

Вопрос:

Я пишу приложение Qt (4.6), которое отвечает за чтение с устройства usb acm-модема. С устройства считывается смесь необработанных двоичных и (ascii) символьных данных. У меня есть поток, который отвечает за постоянное считывание данных с устройства в общую память по мере их поступления, и второй поток, который обрабатывает обработку этих данных.

Я думал об использовании класса QBuffer как средства для хранения данных и обмена ими между потоками, но когда я прочитал о QByteArray (который QBuffer использует в качестве хранилища данных). Я забеспокоился, что QBuffer всегда будет добавлять нулевой символ ‘ 0’ в конец данных, которые передаются между потоками, поскольку QByteArray демонстрирует такое поведение? Так ли это, или QBuffer позволит мне хранить и извлекать данные без применения какого-либо завершающего символа ‘ 0’ для всех моих данных?

Комментарии:

1. QBuffer это не циклический буфер, т. Е. Он продолжает расти по мере добавления данных и не удаляет их при их чтении. Так что на самом деле его нельзя использовать как метод связи между потоками.

Ответ №1:

Завершающий 0 прозрачен для вашего приложения.

Например, если вы добавите «ABC» к массиву, «ABC 0» будет добавлено, но size() все равно вернет 3, а если вы впоследствии добавите «DEF», массив будет содержать «ABCDEF 0» (а size() все равно вернет 6, а не 7).

Завершающий 0 может быть полезен в случае, если вы запрашиваете указатель на необработанные данные для дальнейшей обработки с использованием функций из библиотеки C.