我正在尝试使用浏览器中的JavaScript从JPG获取exif数据。 我正在使用FileReader()类和readAsArrayBuffer()方法。 对于大多数操作,我需要Uint8Array,这就是将ArrayBuffer强制转换为的对象。 我在需要简短的时候向Uint8Array的对象添加了功能:
const getShort = function(position, bigEndian = true) {
const int1 = this[position];
const int2 = this[position+1];
let result = (int1 << 8) | (int2 & 0xFF);
if(!bigEndian) {
let buffer = new ArrayBuffer(16);
let view = new DataView(buffer);
view.setInt16(1,result);
result = view.getInt16(1, true) ;
}
return(result);
}
问题是解析0110 1001
和1000 0111
时得到1000 0111 0110 1001
,它被解释为-30871
而不是34665
。