Показать сообщение отдельно
  #18 (permalink)  
Старый 15.01.2023, 19:23
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

voraa,

Получается BigInt -> Hex надо вот так?

const number = 340282366920938463463374607431768211455n;

const toBinArr = (data) => {
	data = data.toString(16).padStart(data.length + data.length%2, '0'); // Чувствую, что padStart здесь не нужен?
	//да и вообще логично, что для hex строк обязательное должно быть условие, чтобы они делились на 2 без остатка
	const len = data.length;
	const arr = [];
	for (let i=0; i<len; i+=2) {
		const x = data[i]+data[i+1]
		arr.push(parseInt(x,16));
	}
	return arr;
}

const saveBitArray = function (data, filename) {
	const binar = toBinArr(data);
	const buffer = new ArrayBuffer(binar.length);
	let bindata = new Uint8Array(buffer);
	for (let i=0; i<binar.length; i++) 
		bindata[i] = binar[i];
		
    const a = document.createElement("a");
    a.download = filename;
    document.body.append(a);
        
    a.style = "display: none";
        
    const blob = new Blob([buffer], {type: "octet/stream"});
    const url = window.URL.createObjectURL(blob);
    a.href = url;
    a.click();
    window.URL.revokeObjectURL(url);
    a.remove();
};
 
saveBitArray(number, 'examplebin');

Последний раз редактировалось webgraph, 15.01.2023 в 19:43.
Ответить с цитированием