Diferencia entre b"0" y lo que sale de /dev/zero

Diferencia entre b"0" y lo que sale de /dev/zero

En mi investigación sobre una manera de hacer que mi framebuffer de Linux se vuelva completamente negro, me topé con lo siguiente para lo cual estoy buscando una explicación:

  • línea de comando: dd if=/dev/zero of=/dev/fb0da como resultado un framebuffer completamente negro
  • Python: Path('/dev/fb0').write_bytes(FBSIZE * b"0")resulta en una completamentegrisbúfer de cuadros

Jugando con el b"0" podía hacer que el framebuffer fuera de un gris más claro o más oscuro, pero nunca completamente negro.

¿Lo que sale de /dev/zeroeso no es lo mismo que b"0"en Python?

(Para completar, terminé usando setterm --clear all, pero este fenómeno sigue molestándome).

Se agradecería cualquier idea al respecto. ¡Gracias!

Respuesta1

Su uso de b'0'es incorrecto: este es el "carácter cero" - como en el número o valor ASCII 0x30/ 48... de ahí el gris. Lo que realmente quieres es el literal "valor cero", a menudo denominado "nulo", o valor ASCII 0x00/ 0.

Para conseguir esto, intente utilizar la secuencia de escape b'\0'o b'\x00'en su lugar.

Lo que estás usando actualmente también se puede lograr usando la secuencia 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

información relacionada