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