문제는 new Uint8Array()
자바스크립트로 생성된 파일을 일반 파일(ffmpeg와 같은 다른 프로그램에서 사용할 수 있는 파일)로 변환하는 것에 관한 것입니다.
** 바이너리 또는 다른 용어에 대해 uint8인 경우 사용해야 할 올바른 용어를 모르겠습니다...
자바 스크립트에는 ajax를 통해 보내기 위해 버퍼를 uint8로 변환하는 fileReader가 있습니다.
전송되는 것은 다음과 같은 배열입니다 23,42,69,333,99
...
fopen(pack("C*", ...$uintARRAY),"wb")
PHP에서는 쓰기 및 바이너리 모드를 위해 "wb"를 호출할 수 있습니다 .
최종 결과는 다음과 같은 "바이너리" 콘텐츠를 포함하는 파일입니다.
Efl££BÜÅB˜ÅBÚÅBÛÅBÇàmatroskaBáÅBÖÅSÄgˇˇˇˇˇˇˇI©fô*◊±ÉB@MÄÜChrome
Linux bash 스크립트 또는 쉘 명령에서 다음과 동등한 것은 무엇입니까?pack("C*", ...$uintARRAY)
답변1
당신은 다음과 같은 일을 할 것입니다 :
values=(1 2 255)
perl -e 'print pack "C*", @ARGV' -- "${values[@]}"
(또는 이에 상응하는 php -r
).
이 값을 사용하여 바이트를 인쇄합니다.
대부분의 시스템에는 명령에 전달되는 인수의 수와 크기에 대한 제한이 있습니다.
로 전환할 수 있는 옵션이 있는 경우 zsh
다음을 수행할 수 있습니다.
set +o multibyte
printf %s ${(#)values}
내장되어 있으므로 printf
위의 제한 사항에 영향을 받지 않습니다.
bash
+를 사용하여 인수 수 제한을 perl
해결하려면 인수 대신 stdin을 통해 숫자 목록을 제공할 수 있습니다.execve()
(( ${#values[@]} )) && printf '%s\n' "${values[@]}" |
perl -ne 'printf "%c", $_'
perl
둘 다 zsh
1, 2.55e2, 0xff 등과 같은 숫자를 허용합니다. 두 경우 모두 0177은 8진수가 아닌 10진수로 해석되지만 zsh를 사용하여 변경할 수 있습니다 set -o octalzeroes
. 다양한 진수로 숫자나 이진수를 나타내는 zsh
등 더 많은 기호를 지원합니다 .6#123
0b1001
외부 유틸리티를 포크하거나 의존하지 않고 이를 수행하려면 에서 bash
다음을 수행할 수 있습니다.
printf -v format '\\%o' "${values[@]}"
printf "$format"
(의 경우 bash
은 8진수이며 , , 등의 숫자 표현을 printf
지원하지 않지만, 또는 를 사용하여 해당 문자의 값을 지정할 수 있습니다 1).0123
1e2
0b100
2#100
"a
'a
0141
1 단일 바이트 문자 인코딩(ASCII 기반 시스템 의 경우)을 사용하는 로케일의 바이트 값 a
또는 멀티바이트 문자 인코딩(GNU 시스템의 유니코드 코드 포인트)을 사용하는 로케일의 wchar_t 값