Unterschied zwischen b"0" und dem, was aus /dev/zero herauskommt

Unterschied zwischen b"0" und dem, was aus /dev/zero herauskommt

Bei meinen Recherchen nach einer Möglichkeit, meinen Linux-Framebuffer komplett schwarz werden zu lassen, bin ich auf Folgendes gestoßen, für das ich eine Erklärung suche:

  • Kommandozeile: dd if=/dev/zero of=/dev/fb0erzeugt einen komplett schwarzen Framebuffer
  • Python: Path('/dev/fb0').write_bytes(FBSIZE * b"0")ergibt eine völliggrauBildspeicher, Framebuffer

Durch Spielen mit b"0" konnte ich den Framebuffer heller oder dunkler grau machen, aber nie komplett schwarz.

Was kommt dabei heraus, /dev/zeroist nicht dasselbe wie b"0"in Python?

(Nur der Vollständigkeit halber: Ich habe letztendlich verwendet setterm --clear all, aber dieses Phänomen nervt mich immer noch.)

Ich bin für jede Einsicht diesbezüglich dankbar. Danke!

Antwort1

Ihre Verwendung von b'0'ist falsch - dies ist das "Nullzeichen" - wie in der Zahl oder dem ASCII-Wert 0x30/ 48... daher das Grau. Was Sie eigentlich wollen, ist das wörtliche "Nullwert", oft bezeichnet als "Null", oder ASCII-Wert 0x00/ 0.

Versuchen Sie dazu stattdessen, die Escape-Sequenz b'\0'oder zu verwenden b'\x00'.

Was Sie gerade verwenden, lässt sich auch mit der Escape-Sequenz erreichen 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

verwandte Informationen