바이너리 모드를 텍스트 모드로 또는 그 반대로 변환 옵션

바이너리 모드를 텍스트 모드로 또는 그 반대로 변환 옵션

간단한 바이너리 파일을 텍스트 파일로 변환합니다.

od –t x1 Check.tar | cut –c8- > Check.txt

그 내용은 다음과 유사합니다:

 64 65 76 2f 6e 75 6c 6c 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 [...]

반대 접근 방식은 무엇입니까? Check.txt를 원본 파일로 Check.tar로 변환하는 것입니까?

답변1

od -An -vtx1 Check.tar > Check.txt

동일한 바이트 시퀀스가 ​​필요 -v하거나 압축할 것입니다.od

그 반대:

LC_ALL=C tr -cd 0-9a-fA-F < Check.txt | xxd -r -p > Check.tar

또는:

perl -ape '$_=pack "(H2)*", @F' Check.txt > Check.tar

ASCII 텍스트만 지원하는 채널을 통해 파일을 전송하려는 경우 다음과 같은 특수 도구를 사용할 수 있습니다 uuencode.

tar cf - myfiles.* | xz | uuencode myfiles.tar.xz | that-channel 

그리고 반대편에서 다음 파일을 복원합니다.

uudecode < file.uu

다시 생성됩니다 myfiles.tar.xz.

또는:

uudecode -o - < file.uu | xz -d | tar xf -

파일 추출 중.

답변2

이 XY 질문의 X 부분에 답하려면 바이너리 파일 전송이 올바르게 전송되지 않는 이유를 조사하는 것이 좋습니다.

8비트 깨끗한 데이터 경로가 없기 때문에 그 이유가 밝혀지면 이 상황을 처리하기 위해 만들어진 기존 도구(예: )를 사용할 수 있습니다 base64. uuencode오래되었지만 여전히 매우 효과적입니다.

tar czvf - /etc/h* | base64 >/tmp/tar.tgz.b64
ls -l /tmp/tar.tgz.b64
-rw-r--r-- 1 root root 7364 May 26 11:52 /tmp/tar.tgz.b64
...
base64 -d /tmp/tar.tgz.b64 | tar tzvf -

또는

tar czvf - /etc/h* | uuencode - >/tmp/tar.tgz.uue
ls -l /tmp/tar.tgz.uue
-rw-r--r-- 1 root root 7530 May 26 11:51 /tmp/tar.tgz.uue
...
uudecode /tmp/tar.tgz.uue | tar xzvf -

답변3

제 경우에는 원격 장치에 xxd나 uudecode가 없지만 bash는 있습니다. 나는 다음과 같은 결과를 얻었습니다.

바이너리에서 txt로 변환:

od -An -vtx1 myfile.bin > myfile.txt

그런 다음 다음 명령을 사용하여 txt를 다시 바이너리로 변환합니다.

while read p; do
    IFS=' ' read -r -a array <<< "$p" 
    for index in "${!array[@]}" 
    do
        echo -en "\x${array[index]}" 
    done
done < myfile.txt > myfile.bin

관련 정보