Как преобразовать октет в QString?

У меня есть октет в моих источниках. Поэтому мне нужно преобразовать его в QString.

Я попробовал QString str(a); Но это не работает. из того, что я прочитал, октет предположительно является беззнаковым символом

   a = 'A';

Обновление: a - это октет, из того, что я прочитал, говорится: «Поскольку DDS_Octet эквивалентен 1 байту (8 бит)» (http://community.rti.com/kb/what-max-number-Octets-i-can-put-topicdata-builtin-topics)

Обновление 2:

он определяется как беззнаковый символ (беззнаковый байт)


person user1157977    schedule 20.10.2014    source источник
comment
Что вы подразумеваете под октетом? Один байт? Что такое a? Как это объявляется/определяется?   -  person Some programmer dude    schedule 20.10.2014
comment
Вы нашли класс QString в файле .h? Какие перегрузки конструктора доступны? Какие перегрузки оператора присваивания доступны? Должно быть что-то с массивом char.   -  person harper    schedule 20.10.2014
comment
a - это октет, из того, что я прочитал, говорится, что поскольку DDS_Octet эквивалентен 1 байту (8 бит) (community.rti.com/kb/)   -  person user1157977    schedule 20.10.2014
comment
Пожалуйста, обновите свой вопрос вместо того, чтобы распространять вопрос в комментариях. -- Большинство читателей понимают, что октект - это что-то вроде БАЙТА, ​​или 8-битного значения, или символа без знака. Но ваш компилятор ожидает тип данных C. Поэтому, пожалуйста, ответьте на вопрос Иоахима.   -  person harper    schedule 20.10.2014
comment
Октет (8 бит) — это то, что вы передаете по сети. Он существует только в канале связи. На вашем компьютере у вас есть байты (каждый может содержать или не содержать 8 бит), а C++ имеет char (всегда один байт). Просто терминология, но важно правильно понять.   -  person n. 1.8e9-where's-my-share m.    schedule 20.10.2014
comment
I tried QString str(a); but it does not work. Как это не работает? Как насчет QString str(QChar(a))?   -  person Reinier Torenbeek    schedule 20.10.2014
comment
Пожалуйста, выберите ответ, если проблема решена, в противном случае сообщите нам, чего не хватает!   -  person lpapp    schedule 31.10.2014


Ответы (2)


Преобразование unsigned char в QString:

unsigned char a = 'A';
QString str = QString((QChar)a);
person Rémi    schedule 20.10.2014
comment
Не минусую, так как ценю готовность помочь, но... Во-первых, это кастинг в стиле C с целевым классом (!), который не всегда гарантирует работу в любое время. Во-вторых, даже если это был вызов конструктора, он может быть неявным, поэтому в явном выражении практически нет смысла. Попробуйте мой ранее вставленный код, если вы не верите моей логике. :-) Кроме того, на мой взгляд, плохо поощрять преобразование char в QString само по себе. - person lpapp; 20.10.2014

Вероятно, вам не следует не преобразовывать октет в QString сам по себе. Это даст некоторое лишнее преобразование. Что вам было бы лучше сделать, так это, вероятно, преобразовать его в Q(Latin1)Char и использовать его, если вам нужно объединить некоторые манипуляции со строками.

Просто делать это самостоятельно выглядит непрактично. Если вы все еще настаиваете на этом, используйте конструктор QString следующим образом:

main.cpp

#include <QString>
#include <QDebug>

int main()
{
    unsigned char a = 'A';
    QString string(a);
    qDebug() << string;
    return 0;
}

main.pro

TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp

Построить и запустить

qmake && make && ./main

Выход

"A"

Позвольте мне не начинать разглагольствования о том, что QString требует, чтобы экземпляр QCoreApplication работал должным образом, поэтому, пожалуйста, давайте забудем об этом на секунду. :-)

Это будет работать «из коробки», так как QString имеет конструктор который принимает QChar и может использоваться неявно, поскольку QChar имеет конструктор, принимающий беззнаковый символ.

Кстати, в наши дни октет почти всегда состоит из 8 бит на байт. Я бы не беспокоился о том, что с этим будут обращаться по-другому, иначе многие части программного обеспечения могут сломаться. Просто посмотрите код из кода, который вы связали, хорошо?

// DDS_Octet is defined to be 8 bits. If chars are not 8 bits
// on your system, this will not work.
person lpapp    schedule 20.10.2014