#binary #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.
Ответы
Ответ 1
Смотрели Sending and Receiving Binary Data? Не responseText, а response. var byteArray = new Uint8Array(dat);. Я не исследовал вопрос бинарных данных в JS пока, только собираюсь заняться, поэтому не ответ, а лишь догадки.
Комментариев нет:
Отправить комментарий