Кто-нибудь знает этот необычный формат данных?

#types

#типы

Вопрос:

Кто-нибудь когда-нибудь видел этот формат данных? Мне было предоставлено огромное количество записей для импорта из плоского файла, который содержит числовые поля в каком-то упакованном двоичном формате. Я знаю из контекста, что они представляют числа, и у меня есть некоторые существующие переводы / расшифровки, достаточно, чтобы рассказать мне немного о том, как конвертировать. Байт младшего порядка представляет собой наименьшую значащую цифру и может иметь кодированный знак. Вот декодированная цифра, затем закодированный байт и соответствующий битовый шаблон.

 0, 0c, 0000 1100
1, 1c, 0001 1100
2, b1, 1011 0001
3, 14, 0001 0100
4, 3c, 0011 1100
5, 2a, 0010 1010
6, 25, 0010 0101
7, 40, 0100 0000
8, d0, 1101 0000
9, 91, 1001 0001
  

Байты, выходящие за рамки этого первого, похоже, содержат два значения, кажется, что существует 100 сопоставлений от 00 до 99, я покажу здесь только несколько, сначала декодированную пару цифр и шестнадцатеричное значение.

 00, 00, 0000 0000
01, 01, 0000 0001
02, 02, 0000 0010
03, 03, 0000 0011
04, dc, 1101 1100
05, 09, 0000 1001
06, c3, 1100 0011
07, 7f, 0111 1111
08, ca, 1100 1010
09, b2, 1011 0010
10, 10, 0001 0000
11, 11, 0001 0001
12, 12, 0001 0010
13, 13, 0001 0011
14, db, 1101 1011
15, da, 1101 1010
16, 08, 0000 1000
17, c1, 1100 0001
18, 18, 0001 1000
19, 19, 0001 1001
20, c4, 1100 0100
21, b3, 1011 0011
22, c0, 1100 0000
23, d9, 1101 1001
24, bf, 1011 1111
  

Если я столкнусь с 000125, то результатом будет 16. 000000c90c преобразуется в 350. Если я найду 000000000000000f, он должен преобразовать в 0, но я не вижу как, и 0000ec должен привести к -8.

Здесь достаточно повторяющихся шаблонов, которые заставляют меня подозревать, что это какая-то кодировка. И того, что у меня есть сейчас, достаточно для декодирования многих положительных чисел, но не всех, и я понятия не имею, как обрабатывать отрицательные значения, и я не уверен, теряется ли информация в моем отображении (имея в виду форматы ieee с плавающей запятой).

Есть идеи? Спасибо!

Комментарии:

1. Это сжатый формат с кодировкой переменной длины, основанной на частоте чисел?

2. Я не думаю, что он сжат, поскольку поля имеют фиксированную ширину, а некоторые из них очень длинные, 20 байт или около того. Сначала я подумал, что это двоично-десятичный формат или что-то подобное, но после проверки я не смог найти ничего подходящего. Это от компании, которая автоматизировала еще в 1950-х годах, поэтому я уверен, что это какой-то старый формат, используемый для экономии драгоценных байтов при сохранении точности.

3. Если вы не можете получить точную спецификацию формата данных, как вы можете доверять тому, что вы импортируете? Клиент / поставщик / источник должен быть в состоянии объяснить формат. Это, конечно, если они не знают, чем вы занимаетесь. Это для правоохранительных органов / целей безопасности?

4. Ваше описание не очень понятно. Что означают таблицы, т. Е. Как 0 соотносится с 0c , а 1 с 1c и так далее? Как вы думаете, что в конечном итоге кодирует данные: строки чисел, текст, …?

5. @datagod: с моей точки зрения, доверие — это скорее философский вопрос. Я только пытаюсь перевести некоторые старые данные в форму, в которой к ним можно получить доступ. Я в конечном итоге (месяцы? годы?) получите что-нибудь из источника «старой школы», но мне нравится быть немного более гибким, чем это, поэтому мой вопрос.

Ответ №1:

Поскольку он не использует ни один из традиционных форматов мэйнфреймов, ни какие-либо схемы исправления четности / ошибок (подсчитайте установленные биты), я могу только предположить, что это не является чем-то распространенным в новейшей истории. Возможно, к одному из этих старых форматов применяется какая-то операция XOR, но если это так, то, похоже, она не соответствует шаблону, который я могу обнаружить.

Учитывая, что никто не видел этот формат и не имеет ни малейшего представления о том, как написать алгоритм для его декодирования, я просто собираюсь предположить, что это была наполовину испеченная попытка зашифровать числа. Если я смогу найти время, я напишу некоторый код для анализа всех 100 миллионов значений и посмотрю, смогу ли я найти что-нибудь полезное, но сейчас я просто собираюсь подождать и посмотреть, смогут ли создатели данных предоставить ответ. Или подсказка.

Я собираюсь отметить это ответом, поскольку я не хочу мучить людей неразрешимой головоломкой. Извините, если кто-то был разочарован, я только надеялся, что это было что-то неясное, что кто-то здесь, возможно, видел раньше.