Сейчас я пытаюсь угадать, какой тип данных имеют следующие необработанные байты.
25B3 E548 0200 0000 0003 BF1F D44B 217 C 5440 B64E 74B6 E16B 5A40 8B54 F861 F2A9 5440 68C3 95DF C88A 5A40 1021 9EB2 16D 5440 374D 0D3 C FBAB 5A40 01C2 1815 6400 5540 D628 2EA3 4ECF 5A40
Он сохраняется в переменной с именем outlinePath и имеет какое-то действие с формами. Необработанные байты были закодированы в base64 с помощью NSKeyedArchiver.
Я уже пробовал массив float32 и int16. Однако ни то, ни другое не имеет смысла.
Это код, который я придумал. Этот код отлично работает в других частях набора данных:
/**
* Convert the base64 encoded float32 array to actually float32 values
* @param buffer base64 encoded string
*/
export function convertBase64Floats(buffer: string) {
// Decode base64
const decodedBuffer = new Buffer(buffer, 'base64');
// Float32 => 4 bytes
// Get number of float values
const floatValuesCount = decodedBuffer.length / 4;
// New array with correct floats
const arrayOfFloats: number[] = [];
// Get float32s from buffer
for (let i = 0; i < floatValuesCount; i++) {
const offset = i * 4;
const float = decodedBuffer.readFloatLE(offset);
arrayOfFloats.push(float);
}
// Return new array of correct float values
return arrayOfFloats;
}
export function convertInt32Array(buffer: Buffer, useBE: boolean = false) {
const intValuesCount = buffer.length / 4;
const arrayOfInts: number[] = [];
for (let i = 0; i < intValuesCount; i++) {
const offset = i * 4;
const float = useBE ? buffer.readInt32BE(offset) : buffer.readInt32LE(offset);
arrayOfInts.push(float);
}
return arrayOfInts;
}
/**
* Convert the base64 encoded int32 array to actually int32 values
* @param buffer base64 encoded string
* @param useBE use readInt32BE instead of readInt32LE
*/
export function convertBase64Integers(buffer: string, useBE: boolean = false) {
// Decode base64
const decodedBuffer = new Buffer(buffer, 'base64');
// Int32 => 4 bytes
// Get number of integer values
const intValuesCount = decodedBuffer.length / 4;
// New array with correct floats
const arrayOfInts: number[] = [];
// Get float32s from buffer
for (let i = 0; i < intValuesCount; i++) {
const offset = i * 4;
const float = useBE ? decodedBuffer.readInt32BE(offset) : decodedBuffer.readInt32LE(offset);
arrayOfInts.push(float);
}
// Return new array of correct float values
return arrayOfInts;
}
Тот же набор данных также содержит переменную strokePath, которая выглядит аналогичным образом. Также массив с координатами, который называется extremePoints.
Вот ссылка на полный набор данных, закодированный как json: https://pastebin.com/sadZAvyS
Набор данных представляет собой следующую форму:
Может быть, кто-нибудь с большим опытом работы с геометрическими c формами мог бы объяснить мне, как эта структура данных представляет частичную форму.
Редактировать: Я только что заметил , это также могут быть данные только для одного небольшого элемента в частичной форме.