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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2013, 20:24   #1
d0lmat
Новичок
Джуниор
 
Регистрация: 02.09.2010
Сообщений: 1
По умолчанию Проблема с чтением структуры из файла

Доброго времени суток!

Есть файл записанной программой на Си.
В файле храниться структура вида:
Код:
typedef struct
{
  DWORD currid;
  STRING lang;
  STRING country;
} t_counry;
Файл содержит следующее:
Вариант 1:
Код:
33 00 00 00 00 00 52 55   3.....RU
53 00 52 75 73 73 69 61   S.Russia
00                        .
Вариант 2:
Код:
34 00 00 00 00 00 44 45   4.....DE
55 00 47 65 72 6D 61 6E   U.German
79 00                     y.
Вариант 3:
Код:
47 00 00 00 00 00 43 48   G.....CH
4E 00 50 65 6F 70 6C 65   N.People
27 73 20 52 65 70 75 62   's Repub
6C 69 63 20 6F 66 20 43   lic of C
68 69 6E 61 00            hina.
Мне нужно записать в файл данную структуру на дельфи.
Не могу разобраться какой тип использовать для записи строк

Моя структура:
Код:
TCountry = packed record
    CurrID: LongWord;
    Lang: array[0..5] of AnsiChar;
    Country: array[0..7] of AnsiChar;
  end;
Но в этом случае у меня получается, что Lang начинает записываться с первого байта, а не с последнего, как в оригинале:
Код:
33 00 00 00 52 55 53 00  3...RUS.
00 00 52 75 73 73 69 61  ..Russia
00 00 16 00 40           ....@
И в конце еще не понятные байты появляются.

Может кто сталкивался с подобным?
d0lmat вне форума Ответить с цитированием
Старый 18.12.2013, 09:49   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

если файл не содержит секретных сведений, то выложите образец файла.
я, конечно, не спец в типах данных C, но посмотреть могу..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.12.2013, 10:18   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Тут записи переменной длины, типизированный файл в пролете. Со строками вполне понятно, есть признак конца строки - $00. currid - DWORD и 6 байт? Можно читать целиком в буфер (или в MemoryStream) и парсить. Писал бы тоже через стреам
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 18.12.2013, 11:43   #4
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

Может быть лишние 2 байта занести в другое поле и не использовать:
TCountry = packed record
CurrID: DWord;
Dummy: Word; // тут 2 байта
ДралсяСошибками вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с чтением файла. the27mart Общие вопросы C/C++ 4 18.11.2012 22:36
проблема с чтением из файла salwator Помощь студентам 1 23.12.2010 12:11
Проблема с чтением из файла slamm PHP 12 16.01.2010 16:40
Проблема с чтением типизированного файла. Вадим Буренков Общие вопросы Delphi 8 28.05.2009 13:31
проблема с чтением из файла Tesmont Общие вопросы C/C++ 0 20.05.2009 19:39