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

Рейтинг: 3Ответов: 1Опубликовано: 27.11.2014

На 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.

Ответы

▲ 4Принят

Смотрели Sending and Receiving Binary Data?

  1. Не responseText, а response.
  2. var byteArray = new Uint8Array(dat);.

Я не исследовал вопрос бинарных данных в JS пока, только собираюсь заняться, поэтому не ответ, а лишь догадки.