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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Можно ли преобразовать struct в const char*?  (Прочитано 15811 раз)
Vld2
Гость
« : Декабрь 11, 2006, 23:26 »

Можно ли преобразовать struct (или указатель на структуру) в const char*?
Записан
Dendy
Гость
« Ответ #1 : Декабрь 11, 2006, 23:32 »

А Qt как ето касается?
Вообще всё можно, но только складьІвается мнение, что здесь ошибка на етапе проектирования. Какая задача-то?
Записан
Вячеслав
Гость
« Ответ #2 : Декабрь 12, 2006, 00:59 »

загнать структуру куда-нибудь ? и это куда-нибудь хочет const char* на входе?
Перегнать через void * ..... но не красиво и грабли кладем .....хотя работать будет..
Код:

struct a { char c;};
a *ptr;
const char *cPtr= (const char*)(void *)ptr;
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #3 : Декабрь 12, 2006, 09:04 »

вы еще про выравнивание структуры в памяти не забывайте
Записан
QCasper
Гость
« Ответ #4 : Декабрь 12, 2006, 14:40 »

Цитата: "Вячеслав"
загнать структуру куда-нибудь ? и это куда-нибудь хочет const char* на входе?
Перегнать через void * ..... но не красиво и грабли кладем .....хотя работать будет..
Код:

struct a { char c;};
a *ptr;
const char *cPtr= (const char*)(void *)ptr;


Чисто майкрософтовский подход Подмигивающий
И потом, даже если это "куда-нибудь" хочет на входе чар пойнтер, представляю что оно вывалит на выходе, если передать ему структуру Веселый
Записан
Steven_Orko
Гость
« Ответ #5 : Декабрь 12, 2006, 22:22 »

Цитата: "Admin"
вы еще про выравнивание структуры в памяти не забывайте

присоединяюсь, а вообще есть reinterpret_cast
Записан
Vld2
Гость
« Ответ #6 : Декабрь 12, 2006, 23:29 »

Виноват, вернее надо преобразовать struct в const void*.
Записан
Вячеслав
Гость
« Ответ #7 : Декабрь 13, 2006, 00:01 »

Цитата: "QCasper"
Цитата: "Вячеслав"
загнать структуру куда-нибудь ? и это куда-нибудь хочет const char* на входе?
Перегнать через void * ..... но не красиво и грабли кладем .....хотя работать будет..
Код:

struct a { char c;};
a *ptr;
const char *cPtr= (const char*)(void *)ptr;


Чисто майкрософтовский подход Подмигивающий
И потом, даже если это "куда-нибудь" хочет на входе чар пойнтер, представляю что оно вывалит на выходе, если передать ему структуру Веселый

Гы Подмигивающий Хош покажу серьезную железяку продающуюся за неслабые килоевры(итальянского производства) хде обмен сообщениями между частями комплекса построен именно так Подмигивающий
ie первое поле структуры - тип,далее размер , а дальше - че бог на
Собственно для конкретных реализаций IMHO это возможный вариант работы ... но грабли уже лежат .... Хотя - "глупый наступает на грабли дабы получить по лбу, а умный - чтоб их поднять Подмигивающий " (c) непомню
И кстати- подход IBM'овский Подмигивающий времен 360-ых Подмигивающий
Записан
bigirbis
Гость
« Ответ #8 : Декабрь 13, 2006, 10:48 »

Если не ошибаюсь, такие вещи в плюсах решаются наследованием. А такой подход еще с С растет.
Записан
Вячеслав
Гость
« Ответ #9 : Декабрь 14, 2006, 00:31 »

ПОдход имеет ноги более ранние чем С Подмигивающий Временами имеет место быть так-как плюсов нема,а С есть .... В общем - каждый сходит с ума по своему Грустный
Ради хохмы - тут одни вумники железку свою притаскивали ( типа дафайте дружить ) - так вот - у них обмен однокристалки с компом идет на скорости 300 бод Подмигивающий причем 1) сам кристалл летает на 7.32 Mhz 2) обмен построен на ХМL с кучей рющечек в виде namespac'ов и dtd - конфигурация заливалась примерно 4 минуты Грустный 3) Самое веселое Грустный IHMO парсер XML занимает 80% кода Подмигивающий) Так-что вот Подмигивающий
Записан
Vld2
Гость
« Ответ #10 : Декабрь 14, 2006, 07:38 »

Конвертация прошла успешна, за исключением того что в char записывает лишний символ.
struct mine
{ int i;
   char[50];
}
Посылаю например "qt", а получаю "qtA" , где А - любой символ. Бывает дописывает даже 2 или 3 символа. Хотя посылаемый и получаемый размер одинаков. В чем может быть проблема? И как выравнивать структуру в памяти.
Записан
Вудруф
Гость
« Ответ #11 : Декабрь 14, 2006, 07:49 »

В таком варианте вам точно надо помнить про выравнивание.
Про \0 не забыли?
Записан
Vld2
Гость
« Ответ #12 : Декабрь 14, 2006, 22:18 »

Вудруф, Понятно что в конец чаровского массива дописывает \0. Но как это дело можно выровнять?
Записан
bigirbis
Гость
« Ответ #13 : Декабрь 14, 2006, 22:43 »

Выравнивание всегда происходит в большую сторону и нуль никуда не денется, если он там был
Записан
Вудруф
Гость
« Ответ #14 : Декабрь 15, 2006, 08:47 »

Приведи код
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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