我正在尝试使用相同长度的字符和 key 进行简单加密
#define u8 unsigned char
const int CHARMODMAX = 256;
u8 encrypt(u8 value, u8 key){
int rawValue = static_cast<int>(value);
int rawKey = static_cast<int>(key);
return ((rawValue+rawKey)%CHARMODMAX);
}
u8 decrypt(u8 value, u8 key){
int rawValue = static_cast<int>(value);
int rawKey = static_cast<int>(key);
int rawDiff = rawValue-rawKey;
return rawDiff >= 0 ? (rawDiff) : (CHARMODMAX + rawDiff);
}
但是,在调用加密和解密后,我似乎失去了精度。任何帮助都会很棒,请注意,自从我使用 C++ 以来已经很长时间了:)
静态转换为 int 是否会降低精度?如果是这样,有没有更好的方法来进行这个简单的数学计算
最佳答案
这是您的函数的简短形式:
u8 encrypt(u8 value, u8 key)
{
return value + key;
}
u8 decrypt(u8 value, u8 key)
{
return value - key
}
将unsigned char
提升为int
不会丢失任何东西。促销回导致值(value)截断。所以操作:
(unsigned char)(x + y * 256)
总是等同于:
x & 255 // (or 0xFF)
关于C++简单加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28510502/