我试图编写一个函数来解码通过WebSocket连接发送到节点服务器的屏蔽缓冲区。结合使用RFC6455和一些旧的SO答案,这就是我迄今为止所做的:
function decodeMessage(buffer) {
const opCode = buffer.readUInt8(0) & 0xF;
if(opCode === 0x1) {
const data_length = buffer.readUInt8(1) & 0x7F;
let decoded = Buffer.alloc(data_length);
const mask_key = buffer.readUInt32BE(2);
for (let i = 0; i < data_length; i++) {
decoded[i] = buffer.readUInt8(i) ^ mask_key[i % 4];
}
buffer.copy(decoded, 0, 2);
return decoded.toString('utf8');
} else {
return null;
}
}
此代码有两个问题:
>
它不能正确地揭开消息掩码,只是输出乱码Unicode
它每次输出不同的解码消息,即使输入是恒定的
(有效负载长度永远不会超过126,因此不需要担心处理额外的字节)
通过修改本文中的一个函数,我能够实现以下功能:
function decodeMessage(buffer) {
if((buffer.readUInt8(0) & 0xF) === 0x1) {
const length = (buffer.readUInt8(1) & 0x7F)+4;
let currentOffset = 2;
const mask_key = buffer.readUInt32BE(2);
const data = Buffer.alloc(length);
for (let i = 0, j = 0; i < length; ++i, j = i % 4) {
const shift = j === 3 ? 0 : (3 - j) << 3;
const mask = (shift === 0 ? mask_key : (mask_key >>> shift)) & 0xFF;
const source = buffer.readUInt8(currentOffset++);
data.writeUInt8(mask ^ source, i);
}
return data.toString('utf8');
} else {
return null;
}
}
介绍 Cpumasks 是Linux内核提供的保存系统CPU信息的特殊方法。包含 Cpumasks 操作 API 相关的源码和头文件: include/linux/cpumask.h lib/cpumask.c kernel/cpu.c 正如 include/linux/cpumask.h 注释:Cpumasks 提供了代表系统中 CPU 集合的位图,一位放置一个 CPU 序号。我们已经在 Ker
问题内容: 我有以下几点: 我想了解如何计算得出以下结果,例如: 12414 我对位掩码的工作原理一无所知,如果有人能给出一些提示并解释它如何达到这个数字,我将不胜感激。 问题答案: 该表达式等效于2的n次幂。 您撰写本文时,只要和相同,就不同。因此,您可以根据需要以简单的添加方式来考虑它。 数以二进制是所以它是下列标志的总和(或按位OR): 请注意,当从右到左读取时,包含的标志对应于在12414
我试着像上面那样设置面具,但不起作用。
我有一个spring Fox Swagger UI,在那里我执行了许多操作,其中之一是发布到Jira,它要求用户输入他们的用户名和密码。 这个问题是密码不掩码。 我添加了,但没有任何区别。 有什么想法吗?
我用的是甜警报2(https://sweetalert2.github.io/)-react组件,我需要在第二步使用(千分隔符和前缀=“$”)屏蔽输入。是否可能? 这里有些代码 我不知道如何控制这一切。谢谢你的帮助
在 Cocos Creator 3D 中,部分物理组件(目前有刚体组件和碰撞器组件)提供了设置分组和掩码的接口。 共享 在 Cocos Creator 3D 中,目前物理元素和节点是一对一的关系,分组和掩码是属于物理元素的,单个节点上的物理组件修改的都是节点对应物理元素的分组和掩码。 原理 只要以下条件为真就会进行检测 (GroupA & MaskB) && (GroupB & MaskA) 例