QByteArray получает адрес n-го элемента

У меня есть следующий код, который мне нужно перевести в qt из простого С++:

// txMessage and UserData are char arrays
memcpy(&txMessage[18], UserData, 8);

Итак, мое преобразование выглядит так:

QByteArray txMessage;
txMessage.resize(26);
    :
    :
memcpy(&(txMessage.data()[18]), UserData, 8);

Так что это должно работать, но выглядит грязно. Я должен получить указатель данных, используя функцию data(), а затем сослаться на элемент 18 с помощью [18], а затем взять его адрес с помощью &.

Я просмотрел всю документацию QByteArray в Интернете и не вижу другой функции, которая возвращает char*, а оператор [] возвращает только временную переменную, поэтому не могу решить эту проблему. Но для QByteArray так много опций/функций, может я что-то пропустил? Кто-нибудь нашел/получил лучший способ получить адрес n-го элемента в QByteArray?

EDIT Есть несколько вещей, которые не задокументированы в QByteArray:

  • char* data_ptr() - та же проблема
  • Указатель char * - говорит, что это для сравнения stl, но могу ли я его использовать / доверять ему?

person code_fodder    schedule 24.11.2015    source источник
comment
txMessage.data() + 18, немного лучше.   -  person Holt    schedule 24.11.2015
comment
@ Холт, о да .... так немного лучше :) +1   -  person code_fodder    schedule 24.11.2015
comment
Вы пробовали метод replace? txMessage.replace(18, 8, UserData);   -  person Holt    schedule 24.11.2015
comment
@Holt чудесно !, я думаю, я смотрел не в том направлении :) ... прикрепите это как ответ, и я отмечу его, если хотите :)   -  person code_fodder    schedule 24.11.2015


Ответы (1)


Вместо этого вы должны использовать метод replace:

txMessage.replace(18, 8, UserData, 8) ;

Если вы используете версию Qt ниже 4.7, но ваша переменная UserData завершается нулем, то просто:

txMessage.replace(18, 8, UserData) ;

В противном случае:

memcpy(txMessage.data() + 18, UserData, 8);
person Holt    schedule 24.11.2015