使用0x71对每个字节执行异或运算

2024-04-25 19:24:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从文件中读取一个字节,用0x71对其进行异或,然后将其写回另一个文件。但是,当我使用下面的代码时,它只是将字节读取为字符串,所以xoring会产生问题。

f = open('a.out', 'r')
f.read(1)

所以我在C也做了同样的事

#include <stdio.h>
int main() {
  char buffer[1] = {0};
  FILE *fp = fopen("blah", "rb");
  FILE *gp = fopen("a.out", "wb");
  if(fp==NULL) printf("ERROR OPENING FILE\n");
  int rc;
  while((rc = fgetc(fp))!=EOF) {
    printf("%x", rc ^ 0x71);
    fputc(rc ^ 0x71, gp);
  }
  return 0;
}

有人能告诉我如何将使用f.read()得到的字符串转换为十六进制值,以便我可以用0x71对其进行异或,然后将其写入文件吗?


Tags: 文件字符串代码read字节openoutfile
2条回答

试试这个:

my_num = int(f.read(1))

然后将存储在我的号码中的数字进行异或运算

如果要将某个内容视为字节数组,则通常需要一个bytearray,因为它的行为是可变字节数组:

b = bytearray(open('a.out', 'rb').read())
for i in range(len(b)):
    b[i] ^= 0x71
open('b.out', 'wb').write(b)

为字节数组编制索引将返回一个介于0x00和0xff之间的整数,并且就地修改可以避免创建列表并再次将所有内容连接起来的需要。还要注意,该文件是以二进制(“rb”)形式打开的—在您的示例中,使用“r”不是一个好主意。

相关问题 更多 >

    热门问题