Вот немного другая попытка ответить на ваши вопросы.
PIC S9 (15) V9 (3) COMP-3 выглядит так в файле:
00 00 00 00 00 00 00 00 00 0F
Если бы значение было -4568248.323, оно было бы:
00 00 00 00 04 56 82 48 32 3D
Это не поможет вам, но может помочь другим.
Распакованное предыдущее значение будет выглядеть так:
F0 F0 F0 F0 F0 F0 F0 F0 F0 F4 F5 F6 F8 F2 F4 F8 F3 F2 D3 (or F3 as the last byte, therefore losing the sign)
Это поле содержит 15 (фактически 16) цифр перед десятичной запятой и 3 после.
Хотя он запрашивает только 18 цифр (15 + 3), он получает 19, чтобы сделать его равным по длине полем со знаком (одна цифра добавляется впереди, чтобы длина файла составляла 10 байт). Лучше всего всегда делать упакованные поля нечетной длины, чтобы избежать этой путаницы.
** Последняя буква обозначает знак, C & F положительны, D отрицателен. Для вашей программы проверьте отрицательный (D) и, если нет, обработайте как положительный.
** «V» - подразумеваемая десятичная точка. его нет в файле, но COBOL знает, что он существует для округления и тому подобного. Вы должны программно учесть это. В этом файле нет ничего, что могло бы помочь вам определить, где оно находится или даже существует.
Два других поля уже имеют нечетную длину, поэтому при упаковке со знаком они могут храниться на четном месте.
Любые другие вопросы, отредактируйте свой вопрос или задайте его в комментариях, и кто-то постарается ответить на них за вас.