Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在“中”打开文件到底意味着什么;rb";模式_Python_Encryption - Fatal编程技术网

Python 在“中”打开文件到底意味着什么;rb";模式

Python 在“中”打开文件到底意味着什么;rb";模式,python,encryption,Python,Encryption,我刚开始学习Python2.X。我正在尝试使用Python加密一个文件。专业用户都在使用pycrpto,而我只是在做一个简单的项目来探索python在“rb”中打开的文件中的一些基础知识。代码如下: def BinXor(tBIN, kBIN): tLength = len(tBIN) kLength = len(kBIN) if tLength > kLength: while True: kBIN = kBIN + kBI

我刚开始学习Python2.X。我正在尝试使用Python加密一个文件。专业用户都在使用pycrpto,而我只是在做一个简单的项目来探索python在“rb”中打开的文件中的一些基础知识。代码如下:

def BinXor(tBIN, kBIN):
    tLength = len(tBIN)
    kLength = len(kBIN)
    if tLength > kLength:
        while True:
            kBIN = kBIN + kBIN
            if not len(kBIN) < tLength:
                break
    kBINXOR = kBIN[:tLength]
    return "".join(["%x" % (int(x, 2) ^ int(y, 2)) for (x, y) in
    zip(tBIN,kBINXOR)])

def question():
    t = open("b.xlsx",'rb').read()
    k = '00101101'
    print BinXor(t,k)

如果从open file语句中删除“b”,则错误相同。我已经在这里读了几个相关的问题,但仍然找不到线索。有人能帮我吗?为什么我的代码不起作用?在“rb”模式下打开的文件的结果中到底是什么?

您的错误与
打开
无关。错误消息明确指出,问题在于以
'P'
作为参数调用
int
函数。由于
'P'
不代表二进制数,
int
将失败。

谢谢,Blottosmetek!我的固有想法是,自从我在“rb”中打开以来,我应该只得到二进制值/数字。在“rb”中打开文件的结果不是这样的吗?不,区别在于,如果以文本模式打开文件(不带
b
),则将其视为字符串序列;如果以二进制模式打开文件,它将被视为一个
字节序列
。这意味着没有进行字符集解码。它看起来像是返回一个字节字符串。每个字节都可以转换为int,但字符串本身不是数字。请尝试查看
struct
module-@OldGeeksGuide:字节字符串的元素是整数(尽管正如您所说,字符串本身不是整数)。谢谢大家的帮助。现在我可以更好地理解我以前读过的一篇文章了。我查看了“Stroked”,但很难为我的数据找到正确的“fmt”。这个技巧(bin(int(binascii.hexlify(b),16))[2:].zfill(8))似乎可以满足我需要的8位0和1。现在,最后一个问题,在我做了XoR加密之后,再做另一个XoR解密,我如何用“wb”模式写回它们?