javascript中的反向位移位

javascript中的反向位移位,javascript,encoding,bitwise-operators,bit-shift,decoding,Javascript,Encoding,Bitwise Operators,Bit Shift,Decoding,我想知道怎样才能使下面的位移位过程反向进行 chr1 = (enc1 | ((enc2 & 3) << 6)); chr2 = (enc2 >> 2) | ((enc3 & 0x0F) << 4); chr3 = (enc3 >> 4) | (enc4 << 2); chr1=(enc1 |((enc2&3)>2)|((enc3&0x0F)>4)|((enc3&0x0F)>4)|(enc4观察以下计算: // enc

我想知道怎样才能使下面的位移位过程反向进行

chr1 = (enc1 | ((enc2 & 3) << 6));
chr2 = (enc2 >> 2) | ((enc3 & 0x0F) << 4);
chr3 = (enc3 >> 4) | (enc4 << 2);

chr1=(enc1 |((enc2&3)>2)|((enc3&0x0F)>4)|((enc3&0x0F)>4)|(enc4观察以下计算:

// enc = [0, 1, 0, 0]
chr1 = (0 | ((1 & 3) << 6)) = 64
chr2 = (1 >> 2) | ((0 & 0x0F) << 4) = 0
chr3 = (0 >> 4) | (0 << 2) = 0

// enc = [64, 0, 0, 0]
chr1 = (64 | ((0 & 3) << 6)) = 64
chr2 = (0 >> 2) | ((0 & 0x0F) << 4) = 0
chr3 = (0 >> 4) | (0 << 2) = 0

遵守以下计算:

// enc = [0, 1, 0, 0]
chr1 = (0 | ((1 & 3) << 6)) = 64
chr2 = (1 >> 2) | ((0 & 0x0F) << 4) = 0
chr3 = (0 >> 4) | (0 << 2) = 0

// enc = [64, 0, 0, 0]
chr1 = (64 | ((0 & 3) << 6)) = 64
chr2 = (0 >> 2) | ((0 & 0x0F) << 4) = 0
chr3 = (0 >> 4) | (0 << 2) = 0

在我看来,从enc1234移动到chr123时会丢失信息…如果是,则无法反转。在我看来,从enc1234移动到chr123时会丢失信息…如果是,则无法反转。嗨,phihag,我已将脚本的其余部分添加到我的问题中。使用同样的按位移位?只是我以前见过很多这样的函数,它们总是有一个反向(编码)函数,所以我猜这个脚本是可能的。在这种情况下,我没有它,我正在尝试自己重新创建。不,上面是一个数学证明,如果编码操作任意整数,就不可能编写编码函数。但是,你很幸运-你的编码只是从[0,64]映射到[0,255][,因此是可逆的。我添加了这样做的代码。
enc1=chr1&&0x3f;
是逻辑and吗?这是否意味着
enc1
只能是
1
0
?嗨,phihag,非常感谢,但我似乎无法测试它是否有效。我在给出一个测试示例的地方提出了另一个关于这方面的问题。非常接近,但存在一些位移位问题。@Ke。我在一个测试中添加了代码,以证明转换是正确的。我为以前版本中的错误道歉-enc1的位掩码应该是
0xf
。嗨,phihag,我已经在我的问题中添加了脚本的其余部分。真的不可能创建编码函数吗,使用相同的位移位?只是我在过去见过很多类似的函数,它们总是有一个反向(编码)函数,所以我猜这个脚本是可能的。在这种情况下,我没有它,我正在尝试自己重新创建。不,上面是一个数学证明,如果编码操作任意整数,就不可能编写编码函数。但是,你很幸运-你的编码只是从[0,64]映射到[0,255][,因此是可逆的。我添加了这样做的代码。
enc1=chr1&&0x3f;
是逻辑and吗?这是否意味着
enc1
只能是
1
0
?嗨,phihag,非常感谢,但我似乎无法测试它是否有效。我在给出一个测试示例的地方提出了另一个关于这方面的问题。非常接近,但存在一些位移位问题。@Ke。我在测试中添加了代码,以证明转换是正确的。我为以前版本中的错误道歉-enc1的位掩码应为
0xf
enc1 = chr1 & 0x3f;
enc2 = (chr1 >> 6) | ((chr2 & 0xf) << 2);
enc3 = (chr2 >> 4) | ((chr3 & 0x3) << 4);
enc4 = chr3 >> 2;