Оператор while не может выполнить сравнение при использовании байтов. Кажется, он принимает только int - PullRequest
0 голосов
/ 17 апреля 2019

Я хочу сравнить байты в файле file.ser, который имеет 8-битные данные.Мне нужно найти первый ненулевой байт в начале кадра.Я использую red = mm.read (1), чтобы получить байт непосредственно из файла на диске, потому что файлы огромны.Мне кажется, что, хотя и если сравнивать данные int и не удается обеспечить правильное сравнение при попытке сравнить int (0) == b´ \ 00 и Byte (0) == b´ \ 00

«Если»отобразил тот же эффект, и моя попытка переопределить переменные, так как 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

Первое сравнение может быть истинным, только если обе половины сравнения являются целыми.Все остальные случаи выходят из цикла while после одного цикла.PS. Дальнейшее расследование показывает, что (красный +1) терпит неудачу из-за несоответствия типов.Это, вероятно, потому что я не знаю, как изменить или сделать их совместимыми.

1 Ответ

0 голосов
/ 17 апреля 2019

Это был тип, который был неправильным, теперь я нашел

pixel = mm.read (1)

red = int.from_bytes (pixel, "little")

Это заставит цикл while работать и, без сомнения, откроет следующую проблему.Поскольку это один байт, «маленький», вероятно, не требуется, но для полноты там он есть.

...