【发布时间】:2016-09-06 14:21:00
【问题描述】:
我想加密一个浮点型数组并使用相同的函数再次对其进行解码。我在网上阅读了几个主题,但我找不到让我开心的解决方案。 我尝试将浮点类型指针转换为 char* 并使用我的 char 类型键对结果进行异或。 这是我的编码功能:
const char* key = "mykey";
int keylen = sizeof(key) / sizeof(key[0]);
void encodeData(float *data, int size)
{
int bytes = (int)(sizeof(float)/sizeof(char));
for(int i=0; i<size; i++)
{
for(int j=0; j<bytes; j++)
{
data[i] = *(((char *)&data[i]) + j) ^ (key[(bytes*i)%keylen]);
}
}
}
编译工作,但编码和解码后我没有得到相同的结果。我做错了什么?
【问题讨论】:
-
当你在指针上使用
sizeof时,你得到的是指针的大小,而不是它所指向的大小。要么使用strlen获取字符串的长度,要么将key设为一个数组。 -
作业的左侧是错误的。而不是
data[i] =应该是*(((char *)&data[i]) + j) = -
另外,
sizeof(char)由 C 标准规范定义为始终为1。 -
另外,
key[(bytes*i)%keylen]可能不是你想要的。 -
最后,如果您使用指向
char的临时指针,例如char *tmp = (char *) data;,您只需要一个 类型转换。然后您可以使用tmp代替循环中的指针算术和强制转换。并且只有一个循环。
标签: c encryption floating-point bit-manipulation xor