首页 文章

使用字符执行XOR字节比较

提问于
浏览
0

我正在尝试在程序中的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,现在我只是试图让操作编译并希望有效 .

在此先感谢任何帮助/见解 .

编辑*已更新以提供临时数据类型,并显示如何使用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 回答

  • 2

    您正在分配内存以仅保留一个 unsigned char

    unsigned char *load = malloc(sizeof(char));
    

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

    Update

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

    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";
    

    而不是以后分配给它 .

相关问题