我有这个程序编码整数值:

#include "stdafx.h"
#define _SECURE_SCL_DEPRECATE 0
#include <iostream>
#include <list>
#include <vector>
#include <algorithm>

using namespace std;

template<class T>
vector<unsigned char>  nToB(T );
unsigned long ByteToint(vector<unsigned char> v)
{
    unsigned long int a = 0;
    int s = v.size();
    for (int i = 0; i<s ; i++)
    {
        a |= (v[s - 1 - i] << (8 * (s - i - 1)));
    }
    return a;
}

static unsigned  long  int  Encode7Bits(unsigned long int);

int main()
{
    cout << Encode7Bits(420);
    getchar();
    return 0;
}

static unsigned  long  int  Encode7Bits( unsigned long int x)
{
    vector<unsigned char> Result;

    do
    {
        unsigned long  int tmp = x & 0x7f;
        x = x >> 7;
        if (x > 0)
            tmp |= 0x80;
        Result.push_back((unsigned char )tmp);
    } while (x > 0);

    return ByteToint(Result);
}


如果此函数的参数为​​420,它将返回932。

我的问题是,是否有可能进行反向操作(给定932的解码函数返回420)。

最佳答案

不,不是。

从某种意义上说,|=是不可逆的,即如果您编写c = a | b,然后给定c,并且是ab,则无法恢复其他变量。

按位运算符<<>>显然是有损的,因为它们引入了0位。

XOR会带来更好的运气:如果您编写c = a ^ b,则c ^ b将是a

关于c++ - 解码整数值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47469413/

10-10 01:11