シェル/bashでuint8配列(javascript new Uint8Array())をバイナリ形式(またはバイナリモード?)に変換しますか?

シェル/bashでuint8配列(javascript new Uint8Array())をバイナリ形式(またはバイナリモード?)に変換しますか?

問題は、new Uint8Array()JavaScriptで生成されたファイルを通常のファイル(ffmpegなどの他のプログラムで利用可能なファイル)に変換することです。

**バイナリまたは他の用語についてuint8の場合は、使用する正しい用語がわかりません...

JavaScriptには、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どちらもzsh1、2.55e2、0xffなどの数字を受け入れます。どちらの場合も、0177は8進数ではなく10進数として解釈されますが、zshを使用して変更できますset -o octalzeroes。さまざまな進数で数字や2進数を表すなど、zshより多くの記号をサポートします。6#1230b1001

外部ユーティリティをフォークまたは依存せずにこれを行うには、bash次のことを実行できます。

printf -v format '\\%o' "${values[@]}"
printf "$format"

( の場合はbash8 進数であり、 、 などの数値表現をprintfサポートしませんが、 または を使用してその文字の値を指定できます 1)。01231e20b1002#100"a'a


01411シングルバイト文字エンコーディング(ASCIIベースのシステムの場合)を使用するロケールのバイト値、またはマルチバイトa文字エンコーディング(GNUシステムのUnicodeコードポイント)を使用するロケールのwchar_t値

おすすめ記事