【发布时间】:2014-06-27 21:31:20
【问题描述】:
我正在尝试对程序中 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);
【问题讨论】:
-
你能对你看到的问题做一个最小的重现吗?目前,这段代码没有任何意义,例如因为 temp 和 temp2 没有定义。
-
改为:unsigned char *load = malloc(4 * sizeof(char));
-
char temp, temp2 是 temp 的声明方式。
-
无符号字符 *load = malloc(sizeof(char));与 while ((ch = fgetc(fp)) != EOF) { load[i++] = ch; }