Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2012, 15:40   #1
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
Смущение Байтовая конвертация типов данных

не знал как тему обозвать но так вроде бы вернее всего.
задачка такая. у меня есть тип данных - массив integer я в него принимаю данные из сокета. ну этот массив - что то вроде своего формата сообщений (как бы свой протокол) и вот я прочитал в него значения пришедшие от сервака и оказалось что там начиная со второго integer и до конца - это текст. как выудить этот текст оттуда?
Создать стрим, пихнуть туда все и заново прочитать из стрима в нужный формат как то думаю дороговато будет....
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 04.03.2012, 16:35   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А массив Integer обязательно? Не проще сделать массив Byte или Char? Из него проще будет текст извлечь
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.03.2012, 16:57   #3
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

Ну как бы у меня текста не часто приходят. в основном приходят команды для клиента от сервера типа
первое число - идентификатор команды. все остальные числа служебные значения для каждой команды значищие что то свое.

и вот допустим ко мне пришла команда 15 допустим. а это значит что во всех остальных переменных лежит какое то текстовое содержимое

поэтому мне удобнее оперировать с integer
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 04.03.2012, 17:32   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А как коды этих символов размещаются - 1 на Integer или 4 на Integer или как-то по другому?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 04.03.2012 в 17:40.
Аватар вне форума Ответить с цитированием
Старый 04.03.2012, 17:43   #5
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

короче передаю я в паток каждый integer по 4 байта. и так же вытягиваю. вытянул - все норм - все сходится....
и вот передо мной на клиенте тот самый мой тип данных что я передавал. но как выдрать из него текст - не знаю. наверное все таки в стрим писать его надо и потом уже читать оттуда как текст
PS в смысле в первом случае я отправил сообщение с сервера таким то образом как мой тип данных (в случае когда необходимо дать команду) а вот когда текст кидал я на серваке схормировал пакет где первым идет идентификатор команды а далее текст. все пакеты фиксированной длинны. ибо плевался я когда пакеты слипались и не знал а какой длинны мне прислали пакет
Писано по д'Эльфийски

Последний раз редактировалось Лубышев; 04.03.2012 в 17:46.
Лубышев вне форума Ответить с цитированием
Старый 04.03.2012, 17:48   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
var xArrayInteger: array[0..5] of Integer;
    // или xArrayInteger: array of Integer;
    p: PByteArray;
    i: Integer;
    s: String;
begin
//если динамический  SetLength(xArrayInteger,6);
  for i:=0 to 5 do xArrayInteger[i]:=i+1;
  p:=Addr(xArrayInteger[0]);
  s:='';
  for i:=0 to SizeOf(Integer)*(High(xArrayInteger)-Low(xArrayInteger)+1)-1 do
    s:=s+Chr(p^[i]);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.03.2012, 17:48   #7
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

в общем в любом случае у клиента оказалась переменная моего типа данных (массив integer в котором начиная со второго числа идет текст спрятанный в интежерах
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 04.03.2012, 17:49   #8
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

О спасиба. что то похожее вродь)
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 04.03.2012, 20:29   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Без цикла и побыстрей можно еще так
Код:
  SetLength(s,SizeOf(Integer)*(High(xArrayInteger)-Low(xArrayInteger)+1));
  Move(xArrayInteger[0],s[1],SizeOf(Integer)*(High(xArrayInteger)-Low(xArrayInteger)+1));
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.03.2012, 22:14   #10
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

Что то с форумом не того. почему то плюсик поставить нельзя. грят что мол надо оценить кого то еще.. но я оценивал целую толпу людей до этого а все равно...
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конвертация типов: Double to Integer Noor Общие вопросы Delphi 4 26.09.2012 18:46
Конвертация типов DigitalAngel C# (си шарп) 4 15.02.2012 17:16
Ошибка типов данных Lotles Общие вопросы C/C++ 0 08.11.2010 12:53
Конвертация типов в дельфи Vikenty Помощь студентам 2 22.05.2010 18:03
Преобразование типов данных stepchild БД в Delphi 14 19.07.2009 21:45