1

仕様によると、それらは同じ長さである必要があり、長さ 36 の文字列は長さ 48 の文字列に変換する必要があります。次に例を示します。

bin = "123456789012345678901234567890123456"
[49] pry(main)> [bin].pack("m").length
=> 49
[50] pry(main)> [bin].pack("u").length
=> 50
[54] pry(main)> [bin].pack("m")
=> "MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2\n"
[55] pry(main)> [bin].pack("u")
=> "D,3(S-#4V-S@Y,\#$R,S0U-C<X.3`Q,C,T-38W.#DP,3(S-#4V\n"

「面白い改行」を補うと、base64エンコーディング(バリアント)で適切な長さが得られますが、 uuencoding pack('m')(バリアント)で行の長さを正しく取得する方法がわかりませんpack('u')

uuencode された文字列を 48 文字の長さにする必要があります :) ここで何が問題なのですか?

アップデート

私は独自の uuencode 実装を行い、ビットマップを生成するメソッドを作成し、ビットマップなどを分割して uuencode 実装を作成しました。

def to_bitmap bytes
  bytes.scan(/./).map{|b| b.ord.to_s(2).rjust(8, "0")}.join
end

[5] pry(main)> to_bitmap(str).scan(/.{6}/).map{|b| (from_bitmap("00"+b).ord+0x20).chr }.join
=> ",3(S-#4V-S@Y,\#$R,S0U-C<X.3 Q,C,T-38W.#DP,3(S-#4V"
[6] pry(main)> to_bitmap(str).scan(/.{6}/).map{|b| (from_bitmap("00"+b).ord+0x20).chr }.join.length
=> 48

これは良いことだと思います.uuencodeに似ていますが、いくつかの場所が異なります:

 ,3(S-#4V-S@Y,\#$R,S0U-C<X.3 Q,C,T-38W.#DP,3(S-#4V
D,3(S-#4V-S@Y,\#$R,S0U-C<X.3`Q,C,T-38W.#DP,3(S-#4V\n

奇妙なことに、私が実装している仕様は「uuencode」を使用していると思いますが、一般的なソフトウェア ライブラリがこの形式をサポートしていると主張していますが、完全には uuencode ではありません。 uuencodeの?

4

0 に答える 0