Страницы

Поиск по вопросам

четверг, 6 июня 2019 г.

Неверное получение байтов на javaScript

На C# через BinaryWriter запаковываю int'овые значения в бинарный файл. Этот шаг выполняется отлично, но проблема в следующем: При загрузке этих данных через JavaScript я получаю строку через XMLHttpRequest, далее, для наглядности, формирую массив, элементы которого состоят из 4 байтов. var dat=http.responseText;
var bytes = []; for (var i = 0; i < dat.length; i+=4) { var arr='';
for(var l=3;l>=0;l--) { for(var j=7;j>=0;j--) arr+=dat.charCodeAt(i+3-l)>>j & 1; arr+=" "; }
bytes.push(arr);
}
console.log(bytes); В результате получаются искаженные данные, например, первые 4 байта в файле выглядят так в двоичном коде: 00011000 01100111 00000011 00000000 а javaScript получает их как 11111101 00001000 00000010 00000000 В чем причина? Дополнительные исследования: При записи в файлы поменял кодировку на Unicode, не знаю, как это объяснить, но теперь байты считываются правильно, кроме тех, у которых в старшем бите 1, тогда те полностью преобразовываются в 11111101


Ответ

Смотрели Sending and Receiving Binary Data? Не responseText, а response var byteArray = new Uint8Array(dat); Я не исследовал вопрос бинарных данных в JS пока, только собираюсь заняться, поэтому не ответ, а лишь догадки.

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

Отправить комментарий