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與 Python 中的不一樣嗎b"0"

(為了完整起見,我最終使用了setterm --clear all,但這種現像一直困擾著我。)

任何對此的見解將不勝感激。謝謝!

答案1

您的使用b'0'不正確 - 這是“零字元“ - 如數字或 ASCII 值0x30/ 48...因此是灰色的。您真正想要的是文字”零值”,通常稱為“",或 ASCII 值0x00/ 0

為此,請嘗試使用轉義序列b'\0'b'\x00'代替。

您目前使用的內容也可以使用轉義序列來實現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

相關內容