Вот кусок кода, чтобы проверить закачанный тип изображения мима, проверяя желаемый магического число (я до сих пор не понимаю их ясно пока). когда я поставляю файл blob в uint8Array, он работает, массив заполняется. Но если я использую uint16array, он дает ошибку. В чем причина этой ошибки. В нем указан недопустимый аргумент.чтения изображения ArrayBuffer с помощью Uint8 и UInt16 массива
У меня есть два вопроса по этой теме.
1. Почему я не могу использовать uint16array вместо uint8array?
2. Я читал википедию. Но он содержит много технических материалов. Можете ли вы пролить свет на «магическое число», так что я могу понять, что это на самом деле (в двух словах)
var upload=document.getElementById('upload');
upload.addEventListener('change',function(e){
if(window.File && window.FileReader && window.FileList){
var file=e.target.files[0];
console.log(file.type);
var fileReader=new FileReader();
fileReader.onload= function(e){
var arr = (new Uint8Array(e.target.result));
console.log(arr);
var arr2=(new Uint16Array(e.target.result));
console.log(arr2);
};
fileReader.readAsArrayBuffer(file);
}else{
alert('file api not compatible with your browser');
}
});
благодарит за ответ. я не нашел ничего, которые утверждают, что uint16 требует нечетное количество байтов. Вы можете указать любой источник, где я могу его прочитать самостоятельно –
@ AL-zami Нет, это не требует нечетного количества байтов, совершенно наоборот. Как он мог обрабатывать нечетное количество байтов? Что будет с последним? Я не уверен, что это где-то документально, но вы можете сделать тест: 'console.log (новый Uint16Array (новый ArrayBuffer (16)));' (works) 'console.log (новый Uint16Array (новый ArrayBuffer (17))); '(не) – jcaron