我正在使用浏览器内的Javascript,而不是NodeJS.我有两个Uint8Arrays ......
var d1 = new Uint8Array([255, 255, 255, 255, 255, 255, 255, 255])
var d2 = new Uint8Array([255, 255, 255, 255, 237, 49, 56, 0])
Run Code Online (Sandbox Code Playgroud)
每个元素都有8个元素,整数在0到255之间.每个数组代表一个更大的数字.例如,第一个数组表示正整数
0xffffffff
Run Code Online (Sandbox Code Playgroud)
我的问题是如何将d1除以d2得到结果?我读到Javascript中一个整数的最大值是2 ^ 53,我相信它比我可以拥有的最大数字少.我不关心结果的对象类型是什么,但是Uint8Array很好.
在 android 10 和 11(SDK 编号 29 和 30)中,音乐封面(艺术品)格式与以前的版本不同,事实上,它们不能作为受支持的图像文件(例如 jpg 或 png)读取,它们是 uint8lists 和只有 Image.memory 小部件接受并显示它们。
现在,我的问题是我不想将它们作为内存图像读取,我需要 jpg 等文件。
找了很多!读了很多,发现只有 1 个,不起作用的解决方案!这就是将 unit8list 作为字节写入文件中,其路径以“.jpg”结尾。正如我所说,它不起作用。
有人可以帮忙吗?
提前致谢,<3。
final io.File image = File('directory/image.jpg').create();
image.writeAsBytesSync(uint8list);
Run Code Online (Sandbox Code Playgroud)
uint8list 样本:[255, 216, 255, 224, 0, 16, 74, 70, 73, 70, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 255, 226, 2, 40, 73, 67, 67, 95, 80, 82 ,...]
长度:数千
我正在从 API 获取数据以显示销售和财务报告,但我收到了一个 gzip 类型文件,我设法将其转换为 Uint8Array。我想以某种方式将其解析解码为 JSON 文件,我可以用它来访问数据并在前端创建图表。我尝试使用不同的库(pako 和 cborg 似乎是最接近用例的库),但最终出现错误Error: CBOR decode error: unexpected character at position 0
这是我到目前为止所拥有的代码:
let req = https.request(options, function (res) {
console.log("Header: " + JSON.stringify(res.headers));
res.setEncoding("utf8");
res.on("data", function (body) {
const deflatedBody = pako.deflate(body);
console.log("DEFLATED DATA -----> ", typeof deflatedBody, deflatedBody);
console.log(decode(deflatedBody));
});
res.on("error", function (error) {
console.log("connection could not be made " + error.message);
});
});
req.end();
};
Run Code Online (Sandbox Code Playgroud)
我希望任何人都已经偶然发现了这一点并有一些想法。多谢!
我正在Uint8Array使用 CRC32 比较两个,以确保解压缩数据的准确性。Uint8Array.equal()然而,我面临着没有像比较数组这样的API 的问题。虽然Buffer.compare()Node.js 中可用,但浏览器不支持它,我也在研究这个。
我已经创建了一个基本的实现,但我不确定是否有更直接的方法或者我是否忽略了任何内置的比较 API。
function isEqual(arr1: Uint8Array, arr2: Uint8Array): boolean {
if (arr1.length !== arr2.length) {
return false
}
return arr1.every((value, index) => value === arr2[index])
}
Run Code Online (Sandbox Code Playgroud) 我在浏览器中使用“ bson ”npm 包将 JSON 对象转换/序列化为 BSON。文档说它返回一个 Node.js 缓冲区。Node.js 的文档说缓冲区的类型为“Uint8Array”。现在我想在另一个 JSON 对象 (infoJSON) 中发送这个 Uint8Array,但 JSON 不支持 Uint8Array。我尝试将缓冲区 (Uint8Array) 转换为简单数组,将其插入到 JSON 对象 (infoJSON) 中,然后直接从 JSON 对象将其转换回 Uint8Array。但是这个新的 Uint8Array 无法反序列化回原来的 person 对象(参见结果)。它被打破。
为什么我使用 BSON?我想将原始对象分割成多个块,以通过具有数据大小限制的WebRTC数据通道发送它。我需要能够识别每个块(类型)。这就是我使用嵌套对象的原因。
var personJSON = { 'name': 'sarah' } // JSON
var personBuffer = Bson.serialize(personJSON) // Uint8Array
var personArray = Array.from(personBuffer) // Simple array
var infoJSON = { 'count': 1, 'person': personArray } // Inserting array into JSON
var personUint8Array = Uint8Array.from(infoJSON.person) // Converting array back to Uint8Array
console.log('deserializedObj:') …Run Code Online (Sandbox Code Playgroud) 我想创建一个包含 8 个元素的 Uint8Array。我试过这个
var myarr = new Uint8Array(255,255,255,255,40,92,143,2);
Run Code Online (Sandbox Code Playgroud)
但是当我跑
myarr.length
Run Code Online (Sandbox Code Playgroud)
当我期望答案是“8”时,我会返回“255”。我假设我在初始化步骤中做错了什么,但不知道那是什么。
我在 SharedArrayBuffer 上遇到解码()问题。
代码:
var sharedArrayBuffer = new SharedArrayBuffer(2);
var uint8Array = new Uint8Array(sharedArrayBuffer);
uint8Array[0] = 20;
var decoder = new TextDecoder();
decoder.decode(uint8Array);
Run Code Online (Sandbox Code Playgroud)
错误:
Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared.
Run Code Online (Sandbox Code Playgroud)
这里有一个规范警告开发人员有关此类内存的竞争条件。我可以以某种方式强制解码吗?我确信解码期间数据不会改变。或者有解决方法吗?
原因: 我想创建 Uint8Array 的单个副本并将其传递,而不通过 postmessage 复制(如果未指定可传输,则默认复制)到多个(> 3)IFrame(带有沙箱标记)。也许还有其他可能的解决方案?
javascript postmessage uint8array sharedarraybuffer textdecoder
我需要将 2 个现有 arrayBuffer 的 2 部分组合成一个新的。
我正在构建一个解析器,数据来自随机大小的数组缓冲区,数据将溢出一个解析器的末尾,进入另一个解析器的开头。因此,我需要创建一个新的输出缓冲区,并复制一个缓冲区末尾的一部分和另一个缓冲区开头的一部分。输出只是一个数组缓冲区。
从这个演示开始,我打算制作带有一些偏移量的 Uint8Arrays,然后使用 set,问题是某些组合会抛出异常Invalid typed array length。我事先不知道每个数组的长度或偏移量。
var buffer1 = new ArrayBuffer(8);
var buffer2 = new ArrayBuffer(8);
var buffer3 = new ArrayBuffer(8);
var uint8_1 = new Uint8Array(buffer1);
var uint8_2 = new Uint8Array(buffer2);
var uint8_3 = new Uint8Array(buffer3);
uint8_1.fill(1);
uint8_2.fill(2);
var uint8_1_slice = new Uint8Array(buffer1 , 0 , 3);
var uint8_2_slice = new Uint8Array(buffer2 , 4, 7);
Run Code Online (Sandbox Code Playgroud)
对于此演示,需要将 buffer3 设置为 1,1,1,1,2,2,2,2。
无法使用切片
在Java中,我可以BigInteger从String这样的:
public static void main(String[] args) {
String input = "banana";
byte[] bytes = input.getBytes(StandardCharsets.UTF_8);
BigInteger bigInteger = new BigInteger(bytes);
System.out.println("bytes: " + Arrays.toString(bytes));
System.out.println("bigInteger: " + bigInteger);
}
Run Code Online (Sandbox Code Playgroud)
哪个会打印
bytes: [98, 97, 110, 97, 110, 97]
bigInteger: 108170603228769
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用大整数库在JavaScript中获得相同的结果.但正如您所看到的,此代码返回不同的值:
var bigInt = require('big-integer');
function s(x) {
return x.charCodeAt(0);
}
var bytes = "banana".split('').map(s);
var bigInteger = bigInt.fromArray(bytes);
console.log("bytes: " + bytes);
console.log("bigInteger: " + bigInteger);
Run Code Online (Sandbox Code Playgroud)
输出:
bytes: 98,97,110,97,110,97
bigInteger: 10890897
Run Code Online (Sandbox Code Playgroud)
有没有办法通过JavaScript获得我在Java中获得的结果?如果数组的长度为32,那还可以吗?
我正在研究用于加密和解密的React-Native-OpenPGP 。我想从我的文件夹(本地图像获取)/图像 url 中获取图像并将该图像转换为 Uint8Array 进行加密/解密。我是 React Native 的新手,无法找到更好的解决方案。链接也有帮助。需要一个过程来给出图像路径并将其转换为 Uint8Array。
此外还需要一个将图像文件转换为二进制数据以进行加密/解密的解决方案。openpgp 是否有可能提供两种方法,一种是通过 String,另一种是通过 Uint8Array 数据?
uint8array ×10
javascript ×8
arrays ×4
reactjs ×2
api ×1
bigint ×1
biginteger ×1
bson ×1
dart ×1
division ×1
flutter ×1
java ×1
json ×1
openpgp ×1
openpgp.js ×1
postmessage ×1
python ×1
react-native ×1
textdecoder ×1
typed-arrays ×1
typedarray ×1
typescript ×1
uint8list ×1