Преобразование неволовных упакованных данных для десятичного десятичного значения в удвоение

StackOverflow https://stackoverflow.com/questions/796818

  •  18-09-2019
  •  | 
  •  

Вопрос

У меня есть фиксированный текстовый файл ширины, который был распакован из данных COMP-3 в строки фиксированной ширины.

Мне нужно знать, как интерпретировать следующие поля:

FIELD-NAME-1 PIC S9(15)V9(3) COMP-3.
FIELD-NAME-2 PIC S9(3)V9(8) COMP-3.
FIELD-NAME-3 PIC S9(3)V9(6) COMP-3.

Они появляются в моем плоском файле как:

FIELD-NAME-1 0123456789123456780
FIELD-NAME-2 01234567890
FIELD-NAME-3 012345670

Мне нужно знать, какие цифры будут представлять выше.

Это правильно:

FIELD-NAME-1 123456789123456.780  --> The first 0 means +ve?
FIELD-NAME-2 012.34567890
FIELD-NAME-3 012.345670

Спасибо за помощь. ветчина

Это было полезно?

Решение

S9 (15) V9 (3) требует 19 NYBBLE (20 в действительности, так как он должен сделать равномерное количество NYBBLE) для хранения:

  • один для знака.
  • 15 для целочисленного бита.
  • 3 для неинтемерного бита (V является подразумеваемым десятичным, а не реальным).

Знак обычно появляется в конце как C или D Нибл, так что ответ на этот вопрос полностью зависит от того, что распаковывало.

Ваш первый пример фактически имеет правильное количество цифр без Знак, так что я был бы обеспокоен вашим заявлением, что один из них представлял знак. Либо это, либо вы оставили "9". Два других примера имеют достаточно цифр как для знака, так и для числовой части.

Лучше всего, посмотрите, сможете ли вы получить отрицательное число (и другие тестовые данные, такие как 1), чтобы увидеть, что он генерирует.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top