2011-02-18 21 views
6

Dosyadan bir bayt okumak, xor onu 0x71 ile okumak ve başka bir dosyaya geri yazmak gerekiyordu. Ancak, aşağıdakileri kullandığımda, yalnızca bir dize olarak bayt okur, bu nedenle xoring sorun oluşturur.xor ile her bir bayt 0x71 ile

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

Yani C

aynı yapıyor sona erdi
#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; 
} 

birisi ben bunu XOR diye bir altıgen değerine üzerinde f.read() kullanımı hakkında alıyorum dize dönüştürmek nasıl söyler misiniz 0x71 ile ve daha sonra bir dosyaya yazabilirsiniz?

my_num = int(f.read(1)) 

Sonra my_num saklanan numarayı XOR:

+0

http://stackoverflow.com/questions/1035340/reading-binary-file-in-python –

cevap

17

:

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

bir bayt dizisi indeksleme 0x00 ve 0xff arasında bir tamsayı döndürür ve yerinde değişiklik yapmak, bir liste oluşturma ve tekrar herşeye katılma ihtiyacını ortadan kaldırır. Dosyanın ikili ('rb') olarak açıldığını da unutmayın. Örneğinizde, iyi bir fikir olmayan 'r' harfini kullanırsınız.

-3

bu deneyin. Eğer bayt değişken dizi olarak davranır olarak daha sonra genellikle bir bytearray istiyorum bayt bir dizi olarak bir şeyler tedavi etmek istiyorsanız

+0

Muhtemel kopyası Bu durumda bir değer hatası alıyorum. –

+0

http://paste.pocoo.org/show/340639/ –

+0

-1 Soru, bayt değerinin nasıl değiştirileceğiydi. 'int()' bir sayı dizisini aynı şeyde olmayan bir sayıya dönüştürmeyi deneyecektir. – Duncan

İlgili konular