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'올바르지 않습니다. 이것은 "문자 0개" - 숫자 또는 ASCII 값과 동일 0x30/ 48... 따라서 회색입니다. 실제로 원하는 것은 리터럴입니다. "0 값", 흔히 "라고 불린다." 또는 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

관련 정보