我有这个程序编码整数值:
#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
,并且是a
或b
,则无法恢复其他变量。
按位运算符<<
和>>
显然是有损的,因为它们引入了0位。
XOR会带来更好的运气:如果您编写c = a ^ b
,则c ^ b
将是a
。
关于c++ - 解码整数值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47469413/