通信协议加密,异或
一个int由4个字节组成,一个字节占8位
using UnityEngine;
using System.Collections;
namespace YouYou
{
public struct SafeInteger
{
int m_iValue;//异或之后的值,计算机中存的没有10这个数字而是变换之后的数字
const int Mask = 9981;
public static implicit operator int(SafeInteger si)
{
//异或别换
int v = si.m_iValue ^ Mask;
//位的 位移变换,变换之后跟原始数值不一样
return (int)((uint)v << 16 | (uint)v >> 16);
}
/// <summary>
/// 真实值 在Lua中用
/// </summary>
public int RealValue
{
get
{
int v = m_iValue ^ Mask;
return (int)((uint)v << 16 | (uint)v >> 16);
}
}
//取值的时候反向操作
public static implicit operator SafeInteger(int n)
{
SafeInteger si;
n = (int)((uint)n << 16 | (uint)n >> 16);
si.m_iValue = n ^ Mask;
return si;
}
public static SafeInteger operator ++(SafeInteger si)
{
si += 1;
return si;
}
public static SafeInteger operator --(SafeInteger si)
{
si -= 1;
return si;
}
public override string ToString()
{
int v = (int)this;
return v.ToString();
}
}
}