Russian Qt Forum

Qt => Общие вопросы => Тема начата: Dizzy от Март 04, 2010, 09:13



Название: загрузка из файла в определенном формате
Отправлено: Dizzy от Март 04, 2010, 09:13
Понадобились из исходников GIMP 2 следующие функции.
Код:
gchar * fread_pascal_string (gint32 *bytes_read, gint32 *bytes_written, const guint16 mod_len, FILE *f, gint *error);

gchar * gimp_any_to_utf8 (const gchar *str, gssize len, const gchar *warning_format, ...);

gchar * fread_unicode_string (gint32 *bytes_read, gint32 bytes_written, const guint16 mod_len, FILE *f, gint *error);

Нет ли их аналогов в Qt? (не охота тяунть в проект весь Glib)
p.s. если надо могу выложить реализацию функций.


Название: Re: загрузка из файла в определенном формате
Отправлено: SABROG от Март 04, 2010, 09:26
Написал 2, а вставил 3. Напиши чего они делают.


Название: Re: загрузка из файла в определенном формате
Отправлено: Dizzy от Март 04, 2010, 18:22
Написал 2, а вставил 3. Напиши чего они делают.

2 - это GIMP второй версии.  ;)
А функции три.

По поводу - что делают, точно не знаю.
Первая считывает из файла "паскалевскую" строку.
Вторая преобразовывает кодировку строки. Из любой текущей кодировки в кодировку UTF-8.
Третья считывает строку из файла, представленную в кодировке UTF-8.


Название: Re: загрузка из файла в определенном формате
Отправлено: break от Март 04, 2010, 20:16
можно почитать про кодеки ( setCodecCString и т.д. )
использовать соответствующие ф-ции QString::fromUtf8 и др.
что такое "паскалевская строка"?


Название: Re: загрузка из файла в определенном формате
Отправлено: gigabyte от Март 04, 2010, 20:22
Паскалевская строка(класическая) - масив байтов (т.е. char-ов ) от 1 до N где на 0-м месте Количество символом в строке. а все послеующие - символи строки
Код:
struct PascalString {
byte len;
char[len] data;
}
где-то так
Разница между Pascal String  и С\С++ String в том что паскаль хранит явно длинну строки в 0-м байте
а С\С++ неявно в виде признака конца строки null-terminated string


Название: Re: загрузка из файла в определенном формате
Отправлено: Igors от Март 04, 2010, 20:28
что такое "паскалевская строка"?
Код:
typedef unsigned char Str255[256];  // MacTypes.h
Нет 0-терминатора, длина в 1-м байте


Название: Re: загрузка из файла в определенном формате
Отправлено: Пантер от Март 05, 2010, 07:15
Считай в QString и удали нулевой символ.


Название: Re: загрузка из файла в определенном формате
Отправлено: ритт от Март 06, 2010, 02:07
< классическая строка - массив типа char с нуль-терминантой


Название: Re: загрузка из файла в определенном формате
Отправлено: Dizzy от Март 10, 2010, 11:38
можно почитать про кодеки ( setCodecCString и т.д. )
использовать соответствующие ф-ции QString::fromUtf8 и др.

Да, кодеки помогли. А строку действительно пришлось читать как

Паскалевская строка(класическая) - масив байтов (т.е. char-ов ) от 1 до N где на 0-м месте Количество символом в строке. а все послеующие - символи строки
Код:
struct PascalString {
byte len;
char[len] data;
}
где-то так
Разница между Pascal String  и С\С++ String в том что паскаль хранит явно длинну строки в 0-м байте
а С\С++ неявно в виде признака конца строки null-terminated string

Странно что, в Qt нет ничего для работы с паскаль-строками.


Название: Re: загрузка из файла в определенном формате
Отправлено: Пантер от Март 10, 2010, 12:27
А зачем в Qt/с++ паскалевские строки???


Название: Re: загрузка из файла в определенном формате
Отправлено: SABROG от Март 10, 2010, 12:33
А зачем в Qt/с++ паскалевские строки???

Особенно если их длинна ограничена 256 символами. Это всего-лишь 128 букв русского текста в unicode. Чуть меньше чем длинна sms, которую можно отправить с сайта mts (135 знаков).