64,664
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <string.h>
int hexc2v(const char c)
{
return (c >= '0'&&c <= '9') ? c - '0' : (c >= 'a'&&c <= 'f') ? c - 'a' + 10 : (c >= 'A'&&c <= 'F') ? c - 'A' + 10 : -1;
}
void hexstr_xor(char* k, const char* m, const char* n) //假设两个数组里面的字符串长度相同并且已经对齐
{
static const char pre[16][16] = { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','1','0','3','2','5','4','7','6','9','8','b','a','d','c','f','e',
'2','3','0','1','6','7','4','5','a','b','8','9','e','f','c','d','3','2','1','0','7','6','5','4','b','a','9','8','f','e','d','c',
'4','5','6','7','0','1','2','3','c','d','e','f','8','9','a','b','5','4','7','6','1','0','3','2','d','c','f','e','9','8','b','a',
'6','7','4','5','2','3','0','1','e','f','c','d','a','b','8','9','7','6','5','4','3','2','1','0','f','e','d','c','b','a','9','8',
'8','9','a','b','c','d','e','f','0','1','2','3','4','5','6','7','9','8','b','a','d','c','f','e','1','0','3','2','5','4','7','6',
'a','b','8','9','e','f','c','d','2','3','0','1','6','7','4','5','b','a','9','8','f','e','d','c','3','2','1','0','7','6','5','4',
'c','d','e','f','8','9','a','b','4','5','6','7','0','1','2','3','d','c','f','e','9','8','b','a','5','4','7','6','1','0','3','2',
'e','f','c','d','a','b','8','9','6','7','4','5','2','3','0','1','f','e','d','c','b','a','9','8','7','6','5','4','3','2','1','0' };
int i = 0;
while (m[i])
{
k[i] = pre[hexc2v(m[i])][hexc2v(n[i])];
i++;
}
k[i] = 0;
}
int main()
{
char m[256] = "0123456789abcdef";
char n[256] = "fedcba9876543210";
char k[256] = { 0 };
hexstr_xor(k, m, n);
puts(k);
return 0;
}