Формат/кодирование этого файла двоичных данных

Я думаю, что лучший способ, которым я видел, это умножить на 10 на степень числа цифр, затем сделать Math.round, затем, наконец, разделить на 10 на степень цифры. Вот простая функция, которую я использую в машинописи:

function roundToXDigits(value: number, digits: number) {
    value = value * Math.pow(10, digits);
    value = Math.round(value);
    value = value / Math.pow(10, digits);
    return value;
}

Или простой javascript:

function roundToXDigits(value, digits) {
    if(!digits){
        digits = 2;
    }
    value = value * Math.pow(10, digits);
    value = Math.round(value);
    value = value / Math.pow(10, digits);
    return value;
}
1
задан royhowie 26 March 2015 в 21:46
поделиться

1 ответ

Обратное проектирование двоичного формата опасно, если вы собираетесь поставлять свой кодек, созданный методом обратного проектирования. Они могут изменить формат файла без предупреждения. Однако, если вы связаны и полны решимости сделать это:

Вы могли бы сделать одно - посмотреть на формат чисел с плавающей запятой IEEE:

http://steve.hollasch.net/cgindex/coding/ieeefloat .html

И затем, начиная с первого байта файла, прочтите 4 или 8 байтов данных. Преобразуйте оба набора (4 байта и 8 байтов) в значения с плавающей запятой и двойные. Проверьте, соответствуют ли они значениям, которые, как вы знаете, находятся в файле. Если да, то вы, вероятно, нашли компенсацию цены. Распечатайте его плюс смещение. Если нет, увеличьте поиск на один байт и повторите попытку.

Если вы можете найти все значения таким образом, тогда вы сможете безопасно исправить двоичные файлы во время выполнения, выполнив аналогичную операцию: поискать цены, которые, как вы знаете, есть, и затем изменить значения цен в нужном месте.

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

2
ответ дан 3 September 2019 в 01:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: