파일에 특정 바이트를 쓰는 방법은 무엇입니까?

파일에 특정 바이트를 쓰는 방법은 무엇입니까?

myfile다음 내용을 포함하는 파일이 제공됩니다.

$ cat myfile
foos

파일의 16진수 덤프는 다음 내용을 제공합니다.

$ hexdump myfile
6f66 736f 000a

현재 다음과 같이 ASCII 형식으로 콘텐츠를 지정하여 파일을 만들 수 있습니다.

$ echo foos > myfile

ASCII 대신 정확한 16진수 바이트를 제공하여 파일을 생성할 수 있습니까?

$ # How can I make this work?
$ echo --fake-hex-option "6f66 736f 000a" > myfile
$ cat myfile
foos

업데이트: 명확성을 위해 질문을 파일에 적은 수의 바이트를 쓰는 방법을 묻는 것으로 표현했습니다. 실제로 3바이트가 아닌 많은 수의 16진수를 파일에 직접 파이프하는 방법이 필요합니다.

$ cat hexfile
6f66 736f 6f66 736f ...
$ some_utility hexfile > myfile
$ cat myfile
foosfoosfoosfoos...

답변1

당신은 그것을 사용할 수 있습니다 echo -e:

echo -e "\x66\x6f\x6f"

hexdump -C네트워크 바이트 순서의 4바이트 단어로 해석되지 않고 파일 내용이 바이트 순서로 덤프되기를 원합니다 .

답변2

이것은 hexundump내 개인 컬렉션의 스크립트입니다.

#!/usr/bin/env perl
$^W = 1;
$c = undef;
while (<>) {
    tr/0-9A-Fa-f//cd;
    if (defined $c) { warn "Consuming $c"; $_ = $c . $_; $c = undef; }
    if (length($_) & 1) { s/(.)$//; $c = $1; }
    print pack "H*", $_;
}
if (!eof) { die "$!"; }
if (defined $c) { warn "Odd number of hexadecimal digits"; }

답변3

아날로그 바이트열:

echo 41 42 43 44 | 

while/read가 쉽게 1로 구문 분석할 수 있도록 공백을 개행 문자로 변경하세요.

tr ' ' '\n' | 

바이트 단위 구문 분석

while read hex; do

16진수를 ASCII로 변환:

  printf \\x$hex

입력이 끝날 때까지

done

구문 분석 중인 파일이 매우 크면 bash가 느리기 때문에 사용하고 싶지 않을 것입니다. 예를 들어 PERL이 더 나은 선택이 될 것입니다.

답변4

임의의 16진수 데이터를 바이너리 파일에 쓰려면:

echo -n 666f6f | xxd -r -p - file.bin

바이너리 파일에 기록할 파일에 저장된 16진수(입력) 데이터의 경우:

xxd -r -p file.hex file.bin

이진 데이터를 읽으려면:
hd file.bin또는xxd file.bin

데이터 읽기 전용(오프셋 없음):

xxd -p file.bin

관련 정보