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" を操作すると、フレームバッファーを明るいグレーや暗いグレーにすることはできましたが、完全に黒にすることはできませんでした。

そこから何が出てくるのか、 Python の場合/dev/zeroと同じではないのでしょうか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

関連情報