나는 문제를 해결하고 있었는데, 나는 다음과 같은 것을 발견했습니다.데이터 파일파일 확장자가 없습니다. 명령은 file
그것이 임을 보여 줍니다 data file (application/octet-stream)
.hd
국민 총생산.마지막 줄에. 따라서 이 파일을 반대로 하면 다음과 같은 결과를 얻게 됩니다..PNG형식 파일을 찾기 위해 모든 곳을 검색했지만 바이너리 파일의 내용을 되돌리는 방법을 설명하는 솔루션을 찾지 못했습니다.
답변1
xxd
(에서 vim
) 및 tac
(GNU coreutils에서, tail -r
일부 시스템에서도)를 사용하십시오 .
< file.gnp xxd -p -c1 | tac | xxd -p -r > file.png
답변2
In zsh
(내부적으로 이진 데이터를 처리할 수 있는 유일한 셸입니다(고려하고 싶지 않은 경우).ksh93의 base64 인코딩)):
zmodload zsh/mapfile
(LC_ALL=C; printf %s ${(s::Oa)mapfile[file.gnp]} > file.png)
LC_ALL=C
: 문자는 바이트입니다.$mapfile[file.gnp]
file.gnp
:문서 내용s::
: 문자열을 바이트 구성 요소로 분할합니다.Oa
:O
역방향 정렬 배열 첨자a
답변3
펄 사용:
perl -0777pe '$_=reverse $_' [input_file]
성능 시험:
dd if=/dev/urandom of=/tmp/a bs=1M count=1
LC_ALL=C tac -rs $'.\\|\n' /tmp/a > /tmp/r
time perl -0777pe '$_=reverse $_' /tmp/a | diff -q - /tmp/r
time xxd -p -c1 /tmp/a | tac | xxd -p -r | diff -q - /tmp/r
time perl -0777 -F -ape '$_=reverse@F' /tmp/a | diff -q - /tmp/r
time LC_ALL=C tac -rs $'.\\|\n' /tmp/a | diff -q - /tmp/r
결과:
- 로컬 테스트: 내 솔루션은 가장 빠르
perl -0777 -F
면서도 가장 느립니다. - 테스트 대상온라인으로 사용해 보세요!: 내 솔루션은 가장 빠르고
xxd
가장 느립니다.
참고: 모든 솔루션의 실행 시간은 diff
출력과 동일해야 합니다.
답변4
나는 다음을 시도했다:
tac -rs '.' input.gnp > output.png
아이디어는 "tac"이 모든 문자를 구분 기호로 사용하도록 강제하는 것입니다. 바이너리에서 시도해 보았는데 작동하는 것 같습니다. 확인을 해 주시면 대단히 감사하겠습니다.
가장 큰 장점은 파일을 메모리에 로드하지 않는다는 것입니다.