去交错字节
De-interlace bytes
本文关键字:字节 更新时间:2023-09-26
给定的交错位序列为:
ABABABABABABABAB
我可以使用什么javascript逐位操作将其转换为以下序列:
AAAAAAAABBBBBBBB
这被称为取消洗牌(另请参阅Hacker‘s Delight 7.2,洗牌位)。
Hacker‘s Delight中给出的算法是:
t = (x ^ (x >> 1)) & 0x22222222; x = x ^ t ^ (t << 1);
t = (x ^ (x >> 2)) & 0x0C0C0C0C; x = x ^ t ^ (t << 2);
t = (x ^ (x >> 4)) & 0x00F000F0; x = x ^ t ^ (t << 4);
t = (x ^ (x >> 8)) & 0x0000FF00; x = x ^ t ^ (t << 8);
这些右移可以是逻辑的,也可以是算术的,带有掩码的AND确保受该差异影响的位无论如何都不会出现在t
中。
这适用于32位数字,对于16位数字,您可以剪掉每个掩码的左半部分,然后跳过最后一步。
这是一个delta交换序列,请参阅计算机编程艺术第4A卷,比特技巧和技术,比特交换。
如果这个算法对你有好处,请查看它:
function deinterlace(input) {
var maskOdd = 1;
var maskEven = 2;
var result = 0;
for (var i = 0; i < 8; i++) {
result = result << 1;
if(maskOdd & input) {
result += 1;
}
maskOdd = maskOdd << 2;
}
for (var j = 0; j < 8; j++) {
result = result << 1;
if(maskEven & input) {
result += 1;
console.log(result);
}
}
return result;
}
工作小提琴。
相关文章:
- 本地存储中的字符串到字节数组转换
- 什么's导致了512字节的限制-openkeyval或其他什么
- Javascript替换字节数组序列
- 有效负载字节与实际字节不同
- 如何在Javascript中存储字节数组
- JavaScript代码,用于在浏览器中显示字节数组中的PDF文件(非base64编码)
- 使用JavaScript从二进制文件中读取字节,而不使用jQuery
- 正在从字节数组加载图像内容
- 当数据大小超过1119字节时,jqueryajax调用失败
- 将字节转换为用于在HTML5画布上绘制的图像
- Javascript + ActionScript:如何将从Actionscript返回的字节数组转换为Javascri
- JavaScript 中的字节计数
- 将十六进制字符串转换为字节数组
- 在javascript中将声音转换为字节数组
- 与 DataView 和 TypedArray 交换字节顺序
- 在 MVC3 中将字节数组显示为图像
- 跟踪用户何时接收到视频的第一个字节
- 如何在ASP.NET Response.BinaryWrite生成的Javascript中处理字节数组映像
- 如何将Golang中的[][]字节发送到浏览器以解码为图像
- 将数字转换为16位浮点(存储为字节)并返回