首页 > 解决方案 > 使用 Bytes 时,While 语句无法比较它似乎只需要 int

问题描述

我想比较具有 8 位数据的视频 file.ser 中的字节。我需要在帧的开头找到第一个非零字节。我使用 red = mm.read(1) 直接从磁盘上的文件接收一个字节,因为文件很大。我似乎在尝试比较 int(0) == b´\00 和 Byte(0)==b´\00 时比较 int 数据并未能提供正确的比较

“如果”显示了相同的效果,我尝试将变量重新定义为 int 超出了我的知识范围。

mm = mmap.mmap(f.fileno(),0) #0=read the whole file
red = 0 #This value is int
print ("Red ",red) #Confirm int

while  red == 0:      # This works First time

    red = mm.read(1) # Now red is Byte 
    print ("Red = ",red, "Position  ", mm.tell(),"\r" ) #red is b´\x00
    red =red + 1# this fails as well 
else:
    print ("Red = ",red, "Position exit ", mm.tell() ) # exit because red is Byte

只有当比较的两半都是 int 时,第一个比较才能为 True。所有其他情况在一个循环后退出 while。PS.进一步调查显示(红色+1)由于类型差异而失败。这可能是因为我不知道如何更改或使它们兼容。

标签: if-statementwhile-loopintcomparebyte

解决方案


这是我现在发现的错误类型

像素 = mm.read(1)

红色 = int.from_bytes(像素,“小”)

这使 while 循环正常工作,无疑将揭示下一个问题。由于它是一个字节,因此可能不需要“小”,但为了完整起见,它是必需的。


推荐阅读