Tag: 位操作

我可以使用按位运算符来请求Loopback模型吗?

Strongloop Loopback文档没有提到任何有关使用按位筛选器进行对象检索的内容。 例如在Loopback API文档中 : // Just an example of syntax, it does not do bitwise filter Inventory.find({where: {status: {gt: 4}}); 直接连接到MongoDB ,我可以这样做: // Select items with 3rd bit on in `status` field db.inventory.find({status: {$mod: [4, 0]}}); 我可以在Loopback模型接口后面做同样的事吗? 在MongoDB文档中,他们说$是条件可以做同样的事情,而更昂贵 : db.inventory.find( { $where: "this.qty % 4 == 0" } ) 我可以在回送中执行以下操作: Inventory.find({where: "this.qty % 4 […]

节点 – 使用IP地址进行按位计算

我已经在Node中创build了一个DNS工具,我想知道如何使用按位优化toLong()的性能? 我已经包含了一些我的伪代码供参考。 var _parser = function (ip) { return ip.split('.').map(function (i) { return i | 0; }); }, _isIPv4 = function (ip) { var i, isValid = true, octets = _parser(ip); if (octets.length !== 4) { isValid = false; } octets.forEach(function (octet) { if (octet < 0 || octet > 255) { isValid = false; […]

从二进制string读取可变长度位

即时通讯新的javascript和node.js,我有一个base64编码的数据string,我需要parsing几个不同长度的值。 我想我会开始使用Buffer对象来读取b64string,但从那里我完全丢失。 数据是一系列无符号整数,格式与此类似:头文件: 8 bits – uint 3 bits – uint 2 bits – uint 3 bits – unused padding 6 bits – uint 之后,有23位或13位数据长度的循环部分,每个部分都有一些我需要提取的字段。 一个23位段的例子: 3 bit – uint 10 bit – uint 10 bit – uint 我的问题是,什么是采取任意位数,并把结果值在一个单独的uint最好的方法是什么? 请注意,其中一些值是多字节(> 8位),所以我不能逐字节的字节。 我很抱歉,如果我的解释是模糊的,但希望它就足够了。

JavaScript按位屏蔽

这个问题与其他问题类似, 不过,我想了解为什么这样工作。 以下代码: console.log((parseInt('0xdeadbeef', 16) & parseInt('0x000000ff', 16)).toString(16)); console.log((parseInt('0xdeadbeef', 16) & parseInt('0x0000ff00', 16)).toString(16)); console.log((parseInt('0xdeadbeef', 16) & parseInt('0x00ff0000', 16)).toString(16)); console.log((parseInt('0xdeadbeef', 16) & parseInt('0xff000000', 16)).toString(16)); console.log((parseInt('0xdeadbeef', 16) & parseInt('0x000000ff', 16)).toString(16)); console.log((parseInt('0xdeadbeef', 16) & parseInt('0x0000ffff', 16)).toString(16)); console.log((parseInt('0xdeadbeef', 16) & parseInt('0x00ffffff', 16)).toString(16)); console.log((parseInt('0xdeadbeef', 16) & parseInt('0xffffffff', 16)).toString(16)); 返回: ef be00 ad0000 -22000000 ef beef adbeef -21524111 当我期望从.string(16)将是: ef be00 […]

如何有效地读取字节的位?

我正在开发一个包含WebSockets的项目,服务器(Node.js)和客户端(Chrome)之间的数据使用自定义(非常简单)的格式发送,用于我设置的数据交换。 我正在发送3位数据,因为我发送了所有有8种可能性的项目。 数据格式如下所示: 0 1 bit index 01234567 8901… item aaabbbcc cddd… 目前,我正在parsing像这样的字节的项目: var itemA = bytes[0] >> 5; var itemB = (bytes[0] >> 2) & 7; var itemC = (bytes[0] & 3) << 1 | bytes[1] >> 7; var itemD = (bytes[1] >> 4) & 7; 就个人而言,这感觉太复杂了。 问题是,它只是复杂的,因为我得到的字节数是8的倍数。要parsing出3位的项目,我必须进行位移,执行AND操作,因为8不能被3整除有时甚至必须像itemC那样结合两个字节的itemC 。 以3位组而不是8位组读取这些数据会更加有效。 我想到的是使用.toString(2)将所有字节转换为一个string,然后使用.substring得到一个长度为3的子string,并转换回一个数字parseInt(bitString, 2) ,但我想这不是做这件事的方式,因为string操作很慢,我实际上没有做任何string相关的。 是否有可能读取例如3组中的位而不是从字节parsing它们? […]