使用字符执行XOR字节比较

时间:2014-05-10 02:35:27

标签: c byte xor

我正在尝试在程序中的unsigned char数组中的每个第3个字节上执行XOR字节操作。我尝试编译程序时发生类型转换错误。

我的声明

unsigned char *s;
FILE *fp;
char ch;
int count = 0;
unsigned char *load = malloc(sizeof(char));
int i = 0;

s = "s";

这就是发生错误的地方......

for (i = 3; i < count;)
{
    temp = (load[i-1] ^ s);
    temp2 = (load[i] ^ s);
            i = i + 3;
}       

一旦我可以让XOR操作工作,我将设置load [i-1] = temp,现在我只是试图让操作编译并希望有效。

提前感谢任何帮助/见解。

EDIT *已更新以提供临时数据类型,并显示如何使用unsigned char * load = malloc(sizeof(char))从文件中获取数据。

char temp, temp2;


while ((ch = fgetc(fp)) != EOF)
{
    load[i++] = ch;
}

这是它产生的错误...

main.c:14:4:警告:从'char [2]'指定'unsigned char *'在指针之间转换       具有不同符号的整数类型[-Wpointer-sign]

    s = "s";
      ^ ~~~

main.c:86:21:错误:二进制表达式的操作数无效('int'和'unsigned char *')

            temp = (load[i-1] ^ s);
                    ~~~~~~~~~ ^ ~

main.c:87:20:错误:二进制表达式的操作数无效('int'和'unsigned char *')

            temp2 = (load[i] ^ s);

1 个答案:

答案 0 :(得分:2)

您正在分配内存以仅在

中保留一个unsigned char
unsigned char *load = malloc(sizeof(char));

然后,您尝试使用load[i-1]访问第三个字符。

<强>更新

编译器错误非常清楚错误的性质

main.c:86:21: error: invalid operands to binary expression ('int' and 'unsigned char *')

        temp = (load[i-1] ^ s);

也许您打算使用:

        temp = (load[i-1] ^ s[0]);

关于其他编译器消息,您可以通过在s定义时初始化来处理它。

unsigned char *s = "S";

而不是稍后分配给它。