我正在尝试在程序中的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);
答案 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";
而不是稍后分配给它。