Использование QBuffer для двоичных данных - PullRequest
1 голос
/ 03 октября 2011

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

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

Ответы [ 2 ]

1 голос
/ 03 октября 2011

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

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

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

0 голосов
/ 03 октября 2011

Я бы предложил поискать Qt-Apps.org , например, код.

Например, возможно QSerialDevice может дать вам некоторые идеи или приемы. В нем конкретно не упоминается USB, но звучит очень похоже на то, что вы пытаетесь сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...