Russian Qt Forum
Май 06, 2024, 15:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QString в char*  (Прочитано 27795 раз)
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« : Май 12, 2009, 18:49 »

как адекватно перевести QString в сишный массив чаров? Способов куча, но полученный массив нужно скормить функции ldap_initialize(LDAP*, char*). Проблема в том, что на экран выводится всё верно в любом из способов, а вот функции нравится только конвертация через std::string
То есть такой код работает:
Код:
    QString str("ldap://localhost/");
    const char * ldapuri = str.toStdString().c_str();
    int ret = ldap_initialize(&cur_session, ldapuri);
Другие варианты (через Ascii, Latin1 и тп - нет). Как сделать без std строки?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Май 12, 2009, 19:34 »

Код
C++ (Qt)
int ret = ldap_initialize(&cur_session, str.toLocal8Bit().constData());
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #2 : Май 12, 2009, 19:50 »

ага, проблема я так понял в том, что ф-ии конвертации возвращают объект, лежащий в стеке и после присвоения стек благополучно сворачивается, удаляя указатель... Кстати мой пример всё-таки не работает:)
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Июнь 19, 2009, 10:21 »

Разобрался что не работало?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #4 : Июнь 19, 2009, 10:45 »

говорю же - временный объект (значение toLocal8Bit()) удалялся после вычисления выражения, снося char*, сохраненный во временную переменную, своим деструктором. Спасибо за помощь
Записан
fuCtor
Гость
« Ответ #5 : Июнь 24, 2009, 08:55 »

Кусок:
>> str.toLocal8Bit().constData()

Можно заменить на:
qPrintable(str).
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #6 : Июнь 24, 2009, 10:07 »

А вот к примеру иная задачка: нужно из char* в QString преобразовать строку.. но получается ерунда какаят:
Код:
....
CHAR res[65535];
DWORD retval=QueryDosDeviceA("COM1", res, 65535);
QString tmp = QString("retval : %1").arg(retval);
qDebug() << tmp;
qDebug() << res;
QString str;
str.fromAscii(res);
qDebug() << str;
....

выводит:
Цитировать
D:\projects\QSerialDevice_24062009_1700\examples\devices>release\default.exe
"retval : 17"
\Device\Serial0
""
Записан

ArchLinux x86_64 / Win10 64 bit
Rcus
Гость
« Ответ #7 : Июнь 24, 2009, 10:17 »

fromAscii, fromLocal8Bit, fromUtf8 - статические методы класса QString
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #8 : Июнь 24, 2009, 11:40 »

И??
Записан

ArchLinux x86_64 / Win10 64 bit
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #9 : Июнь 24, 2009, 12:44 »

str.fromAscii(res); заменить на str = QString::fromAscii(res);
Записан
Белый пони
Гость
« Ответ #10 : Июль 02, 2010, 15:06 »

У мня не получается так. Вот кусок кода:

Вот кусок кода:
Код:
QString str = m_ui->lineFName->text();
QByteArray ba = str.toLocal8Bit() ;
char *tempChar = new char[100];
tempChar = ba.data();
FileName = tempChar;

Потом  char* FileName использую для открытия файла:
Код:
ofstream myfile;
myfile.open( FileName );

Но вместо этого появляются файлы, с совершенно не читаемыми названиями. Пробовал вместо toLocal8Bit - toAscii , toLatin1, toUtf8. Ничо не помогает:(
Чо делать?
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #11 : Июль 02, 2010, 15:12 »

Код:
extern openFile( char* fileName );
...
QString qstrFileName = m_ui->lineFName->text();
...
openFile( qstrFileName.toLocal8Bit().data() );

так понятно?

то есть, преобразовывать из QString в char* в самый последний момент, не таскать везде указатель char*
« Последнее редактирование: Июль 02, 2010, 15:23 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Белый пони
Гость
« Ответ #12 : Июль 02, 2010, 15:41 »

Код:
extern openFile( char* fileName );
...
QString qstrFileName = m_ui->lineFName->text();
...
openFile( qstrFileName.toLocal8Bit().data() );

так понятно?

то есть, преобразовывать из QString в char* в самый последний момент, не таскать везде указатель char*

Спасибо! Заработало Улыбающийся

Я правда пока не понял, почему он на передваемый char* ругался, но теперь всё окей Смеющийся
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #13 : Июль 02, 2010, 15:51 »

Цитировать
Я правда пока не понял, почему он на передваемый char* ругался

там несколько бредовых моментов было, из-за ненужного использования QByteArray


Записан

2^7-1 == 127, задумайтесь...
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.072 секунд. Запросов: 23.