Diferença entre b"0" e o que sai de /dev/zero

Diferença entre b"0" e o que sai de /dev/zero

Em minha pesquisa sobre uma maneira de deixar meu framebuffer do Linux completamente preto, me deparei com o seguinte, para o qual estou procurando uma explicação:

  • linha de comando: dd if=/dev/zero of=/dev/fb0resulta em um framebuffer completamente preto
  • Python: Path('/dev/fb0').write_bytes(FBSIZE * b"0")resulta em uma solução completamentecinzaSuavizador de quadros

Brincando com o b"0" eu poderia deixar o framebuffer cinza mais claro ou mais escuro, mas nunca completamente preto.

O que resulta disso /dev/zeronão é o mesmo que b"0"em Python?

(Só para completar, acabei usando setterm --clear all, mas esse fenômeno continua me incomodando.)

Qualquer visão sobre isso seria apreciada. Obrigado!

Responder1

Seu uso b'0'está incorreto - este é o "caractere zero"- como no número ou valor ASCII 0x30/ 48... daí o cinza. O que você realmente quer é o literal"valor zero", muitas vezes referido como"nulo", ou valor ASCII 0x00/ 0.

Para conseguir isso, tente usar a sequência de escape b'\0'ou b'\x00'.

O que você está usando atualmente também pode ser alcançado usando a sequência de escape b'\x30'.


$ python3 -c 'from pathlib import Path; Path("test.bin").write_bytes(8 * b"0")'
$ hexdump -Cv < test.bin
00000000  30 30 30 30 30 30 30 30                           |00000000|
00000008
$ python3 -c 'from pathlib import Path; Path("test.bin").write_bytes(8 * b"\x00")'
$ hexdump -Cv < test.bin
00000000  00 00 00 00 00 00 00 00                           |........|
00000008
$ python3 -c 'from pathlib import Path; Path("test.bin").write_bytes(b"Hello012")'
$ hexdump -Cv < test.bin
00000000  48 65 6c 6c 6f 30 31 32                           |Hello012|
00000008

informação relacionada