【问题标题】:Performing XOR byte comparisons with chars使用 char 执行 XOR 字节比较
【发布时间】: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; }

标签: c byte xor


【解决方案1】:

您正在分配内存以仅保存一个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";

而不是稍后分配给它。

【讨论】:

  • 您很好地说明了问题(其中之一)。但不确定 OP 问题是否得到明确回答。
  • 由于temptemp2 的类型未知,所以没有明确回答OP 的问题。
  • 编辑了帖子以提供更清晰的信息,我希望这会有所帮助。
  • 谢谢,这解决了大部分编译问题。
  • 使用s[0] 的另一种可能更简单的解决方案是定义:unsigned char s = 's';
猜你喜欢
  • 1970-01-01
  • 2019-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多