На 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 пока, только собираюсь заняться, поэтому не ответ, а лишь догадки.
Комментариев нет:
Отправить комментарий