【问题标题】:TypeError: ord() expected string of length 1, but int found bse64 from image类型错误:ord() 预期长度为 1 的字符串,但 int 从图像中找到 bse64
【发布时间】:2021-10-08 17:14:11
【问题描述】:

在这种情况下,我想使用 base64 将图像转换为字符串。然后我使用 ord() 方法转换为整数。但我有一个错误。这是我的简单代码:

def input_image_to_string():
filename = filedialog.askopenfile(
    initialdir="/",
    title="Pilih Gambar",
    filetypes=(
        ("png files", "*.png"),
        ("jpg files", "*.jpg"),
        ("bmp files", "*.bmp")
    )
)
image = filename.name
with open(image, 'rb') as file:
    result = base64.b64encode(file.read())
return result

def Hash_the_image(string, panjang):
    input = [ord(character) for character in string]
    print("Convert to Integers: \n" , input)
    pesan_block = array_t(uint8_t, panjang)
    masukan = pesan_block([uint8(i) for i in input])
    hasil = gimli_hash(masukan, panjang)
    print("Hasil hashing: ")
    return hasil
if __name__ == "__main__":
    input = input_image_to_string()
    panjang = len(input)
    print(panjang)
    output = Hash_the_image(input, panjang)
    print(output)

这是我的错误:

TypeError: ord() 预期长度为 1 的字符串,但找到了 int

【问题讨论】:

标签: python python-3.x


【解决方案1】:

切片字节在 Python3 中总是返回整数(已经表示 Unicode 代码点):

>>> x = b'abc'
>>> x[1]
98
>>> ord('b')
98

ord() 已过时:

...
def Hash_the_image(input, panjang):
    input = [character for character in input]  # keep ints ...
    print("Convert to Integers: \n", input)
    pesan_block = array_t(uint8_t, panjang)
    masukan = pesan_block([uint8(i) for i in input])
    hasil = gimli_hash(masukan, panjang)
    print("Hasil hashing: ")
    return hasil
...

输出:

31796
Convert to Integers:
[105, 86, ...

【讨论】:

  • 哇,感谢您的帮助,愿上帝奖励您:D
【解决方案2】:

试试下面的代码:

def input_image_to_string():
    filename = filedialog.askopenfile(
        initialdir="/",
        title="Pilih Gambar",
        filetypes=(
            ("png files", "*.png"),
            ("jpg files", "*.jpg"),
            ("bmp files", "*.bmp")
        )
    )
    image = filename.name
    with open(image, 'rb') as file:
        result = base64.b64encode(file.read())
    return result

def Hash_the_image(string, panjang):
    input = [ord(str(character)) for character in string]
    print("Convert to Integers: \n" , input)
    pesan_block = array_t(uint8_t, panjang)
    masukan = pesan_block([uint8(i) for i in input])
    hasil = gimli_hash(masukan, panjang)
    print("Hasil hashing: ")
    return hasil
if __name__ == "__main__":
    input = input_image_to_string()
    panjang = len(input)
    print(panjang)
    output = Hash_the_image(input, panjang)
    print(output)

【讨论】:

  • str(character) 几乎肯定会给出错误的结果。这会将字符的 ord 转换为字符串,这可能会导致 ord 引发错误。
  • 我还是有错误,TypeError: ord() 需要一个字符,但是找到了长度为 3 的字符串
  • ord()函数可以转换一串符号吗?或者没有?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-23
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多