繁体   English   中英

我不明白此代码“如何在javascript中的数组内编写uint32”的工作原理

[英]I don't understand how this code to “write an uint32 inside an array in javascript” works

因此,基本上,我拥有这段代码,可以在其他人的代码中找到它们,并且可以很好地完成我想做的事情,但是我想了解它是如何工作的。

我想知道与将uint32写入数组(例如使用Uint8Array并在Uint32Array缓冲区中写入内容或将DataView与setUint32一起使用)的区别不会产生相同的结果

function writeUint32(message, value){
    while(true){
        if((value & -128) === 0){
            message.push(value)
            return
        }
        else {
            message.push(value & 127 | 128)
            value >>>= 7
        }
    }
}

不同之处在于此函数以可变长度格式写入值,每个字节使用7位数据,并使用1位以低字节序(第一个字节包含低位位)来表示随后有更多数据。 这就是LEB128 DataView上的setUint32只是将位直接复制到基础数组,而无需花哨的编码。 LEB128(或其他可变长度编码)可用于节省空间(如果编码值通常不高),但是会花费一点额外的工作来进行编码和解码。

为了解释代码,

(value & -128) === 0

这将检查前25位是否全部为零,如果是,则当前值适合7位块,并将其作为最后一个块(未设置“继续”标志)。

value & 127 | 128

这从值中获取最低有效7位,然后在结果块上设置“继续”标志。

value >>>= 7

然后删除刚编码的位,并继续使用该值的较高位。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM