특정 값을 가진 바이너리 파일을 만드는 방법은 무엇입니까?

특정 값을 가진 바이너리 파일을 만드는 방법은 무엇입니까?

채우기만 만들어야 합니다 11111111.

제로 패딩된 바이너리 파일을 만드는 방법만 알고 있습니다.

dd if=/dev/zero bs=18520 count=1

빈을 채우기 위해 파이프라인에서 어떤 명령을 사용해야 하는지 알려주실 수 있나요 1? awk이런 경우에는 어떻게 사용해야 하나요?

답변1

아마도 0을 원하는 값 tr으로 변환한 다음 또는 등을 사용하여 길이를 자르는 것이 가장 쉬운 방법일 것입니다./dev/zeroddhead

이는 18520바이트를 쓰고 모든 비트는 1이므로 값은 0xff, 255 또는 8진수로 377입니다. 입력은 다음과 같아야 하기 때문입니다.

< /dev/zero tr '\000' '\377' | head -c 18520 > test.bin

(16진수나 10진수를 8진수로 변환하려면 등을 사용할 수 있습니다 printf "%o\n" 0xff.)


1바이트 문자열보다 긴 스트림을 생성하려면 Perl을 사용합니다.

perl -e '$a = "abcde" x 1024; print $a while 1' | head ...

"\xff"(물론 or 거기도 사용할 수 있습니다 "\377". 저는 주로 작은 쓰기를 최소화하기 위해 반복 연산자를 사용하고 있습니다 x 1024. 이를 변경하면 성능에 영향을 미칠 수도 있고 그렇지 않을 수도 있습니다.)

답변2

사용하지 마세요 dd bs=…: 신뢰할 수 없습니다. ibs=1 obs=1오류가 발생하기 쉬운 도구를 사용 하거나 사용하십시오. 대부분의 head구현에서는 바이트를 계산할 수 있습니다.

</dev/zero head -c 18520

파일을 0이 아닌 단일 바이트로 채우려면 바이트 값 변경을 사용하십시오 tr. 모든 사람에게:

</dev/zero head -c 18520 | tr '\0' '\377'

답변3

귀하의 질문에 구체적으로 대답하기 위해 dd를 사용하면 파이프에서 tr과 잘 작동합니다.

dd if=/dev/zero bs=18520 count=1 | tr '\000' '1' > test.bin

그러나 보다 적절한 답변을 제공하려면 이 범위를 명확히 해야 합니다.

관련 정보