Страницы

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

вторник, 17 марта 2020 г.

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

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

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

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