Как создать массив неподписанных символов в Qt? - PullRequest
1 голос
/ 13 марта 2012

Я новичок в очереди (FIFO) и Qt.Я хочу создать очередь массива без знака в Qt.Как это сделать?Пожалуйста, помогите

unsigned char buffer[1024];

1 Ответ

3 голосов
/ 13 марта 2012

Если вы хотите использовать Qt API, вы можете использовать класс QQueue -

 QQueue<unsigned char> queue;
 queue.enqueue(65);
 queue.enqueue(66);
 queue.enqueue(67);
 while (!queue.isEmpty())
     cout << queue.dequeue() << endl;

Если вы хотите построить очередь самостоятельно, то, я думаю, вы можете объявить класс Queue следующим образом -

class Queue
{
private:
    enum{SIZE=1024, EMPTY=0};
    unsigned char buffer[SIZE];
    int readHead, writeHead;

public:
    Queue()
    {
        readHead = writeHead = EMPTY;
    }

    void push(unsigned char data);
    unsigned char pop();
    unsigned char peek();
    bool isEmpty();
};

void Queue::push(unsigned char data)
{
    if((readHead - writeHead) >= SIZE)
    {
        // You should handle Queue overflow the way you want here.
        return;
    }

    buffer[writeHead++ % SIZE] = data;
}

unsigned char Queue::pop()
{
    unsigned char item = peek();
    readHead++;
    return item;
}

unsigned char Queue::peek()
{
    if(isEmpty())
    {
        // You should handle Queue underflow the way you want here.
        return;
    }

    return buffer[readHead % SIZE];
}

bool Queue::isEmpty()
{
    return (readHead == writeHead);
}    

Если вы хотите поддерживать массив из очереди unsigned char, вам придется поддерживать очередь из unsigned char указателей -

QQueue<unsigned char *> queue;
unsigned char *array1 = new unsigned char[10];    // array of 10 items
array1[0] = 65;
array1[1] = 66;
queue.enqueue(array1);
unsigned char *array2 = new unsigned char[20];    // an array of 20 items
queue.enqueue(array2);

unsigned char *arr = queue.dequeue();
qDebug() << arr[0] << ", " << arr[1];

Примечание : после завершения работы с этой очередью следует позаботиться об очистке памяти. ИМХО, вам лучше избегать такого типа дизайна.

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