С макрос на C ++ \ Qt - PullRequest
       5

С макрос на C ++ \ Qt

2 голосов
/ 11 октября 2010

У меня есть следующий макрос c из плагина libpurple yahoo:

#define yahoo_put16(buf, data) ( \
        (*(buf) = (unsigned char)((data)>>8)&0xff), \
        (*((buf)+1) = (unsigned char)(data)&0xff),  \
        2)

Я хочу реализовать то же самое, что и функция в моем классе, которая получит в качестве параметра значение quint16 и вернет его как QByteArray. У меня есть следующее, но я не получаю тот же результат, что и с макросом выше.

QByteArray YahooPacket::packQuint16(quint16 value) const
{
    QByteArray data;

    data.append(QByteArray::number((value >> 8) & 0xFF));
    data.append(QByteArray::number(value & 0xFF));

    return data;
}

Как мне реализовать свою функцию?

1 Ответ

2 голосов
/ 11 октября 2010

QByteArray::number() создает печатную (строковую) версию номера, которая, вероятно, не соответствует вашей. Используйте конструктор QByteArray, который принимает указатель буфера и параметр размера. Я думаю, что это будет делать то, что вы хотите.

QByteArray YahooPacket::packQuint16(quint16 value) const
{
    QByteArray data;

    data.append(QByteArray(((char*)&value)+1,1));
    data.append(QByteArray((char*)&value,1));

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