Разница между b"0" и тем, что получается из /dev/zero

Разница между b"0" и тем, что получается из /dev/zero

В ходе моих исследований способа сделать фреймбуфер Linux полностью черным, я наткнулся на следующую вещь, объяснение которой я ищу:

  • командная строка: dd if=/dev/zero of=/dev/fb0приводит к полностью черному буферу кадра
  • Python: Path('/dev/fb0').write_bytes(FBSIZE * b"0")приводит к полностьюсерыйкадровый буфер

Играя с b"0", я мог сделать буфер кадра светлее или темнее, но не полностью черным.

Что из /dev/zeroэтого получается не такого, как b"0"в Python?

(Чтобы быть полным, я в конечном итоге использовал setterm --clear all, но это явление продолжает меня беспокоить.)

Любая информация по этому поводу будет оценена по достоинству. Спасибо!

решение1

Вы неправильно используете b'0'- это "нулевой символ" - как в числе или значении ASCII 0x30/ 48... отсюда и серый цвет. На самом деле вам нужен буквальный "нулевая стоимость", часто называемый "ноль", или значение ASCII 0x00/ 0.

Чтобы получить это, попробуйте вместо этого использовать последовательность escape b'\0'или b'\x00'.

То, что вы сейчас используете, можно также достичь с помощью 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

Связанный контент