Версия для печати темы (https://pro1c.org.ua/index.php?s=183fc7f99057509ae67d6006f7458a13&showtopic=66680)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Двоичные данные: мапинг файла и структур как в С++

Автор: DiakonX 04.08.21, 19:41

Подскажите, есть ли в 1с аналог мапинга файла и структур как в С++ например.
Т.е. у меня есть двоичный файл структуру, которого я знаю, например:
struct{
a : byte;
b: dword;
c: byte;
} structfile

Можно как-то загрузить файл в память, считывать данные определенным размером и работать с ними как со структурой? И можно ли создать структуру, в которой элементы разного размера?

Спасибо.

Автор: Vofka 05.08.21, 6:47

https://pro1c.org.ua/redirect.php?https://its.1c.ru/db/metod8dev/content/5917/hdoc есть пример чтения файла. Но смаппить его в структуру вам придется вручную: читать побайтно и заполнять свою структуру.

Автор: DiakonX 07.08.21, 10:09

Спасибо. В предложенном примере допущена ошибка конечно (в загружаемом варианте, т.к. он отличается от выложенного в тексте). Там ведется работа с типом данных РезультатЧтенияДанных, а должен вестись с БуферДвоичныхДанных. Пропущена одна операция. Но в принципе это не важно, просто к тому, что скачиваемый пример нерабочий, хоть и легко правится.

Но возник второй вопрос. В свойствах двоичного буфера я нашел только
ПрочитатьЦелое16 (ReadInt16)
ПрочитатьЦелое32 (ReadInt32)
ПрочитатьЦелое64 (ReadInt64)

Есть ли возможность читать float? Или прочитать 4 байта и как-то преобразовать в float?

Автор: Vofka 09.08.21, 8:22

DiakonX @ 07.08.21, 11:09 * ,
я могу ошибаться, но на сколько я понимаю суть происходящего, когда читаешь по байтам, то читаешь только целые числа. Если у вас там записано float, то записано оно все равно будет набором целых чисел. И вам должно быть известно, наверное, что из этого набора цифра до точки, что после.

Автор: DiakonX 10.08.21, 7:17

Vofka @ Сегодня, 9:22 * ,
Все немного сложнее. Есть стандарт для float IEEE754.
Вот немного текста по данной теме https://pro1c.org.ua/redirect.php?https://habr.com/ru/post/112953/
Потребуются побитовые операции. Не хотелось так усложняться. Но если стандартных методов 1С не предлагает, то наверное придется.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua