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/fb0
erzeugt 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/zero
ist 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