0

IntegerDigits と ToCharacterCode を使用して、文字列をバイナリの 2D テーブルに変換します。ここでこれを逆にする必要があり、すべての Mathematica ヘルプは FromDigits が IntegerDigits の逆であると主張しています。それでも元の弦には戻れません。これが私のコードです:

ConvTextTo[s_String]:= IntegerDigits[ToCharacterCode[s],2, 8];
ConvTextFrom[l_List]:= FromCharacterCode[FromDigits[l, 2]];

これは意味不明な結果を返し、その理由がわかりません。FromDigits が実際に IntegerDigits の逆である場合、神のために、なぜこれが機能しないのでしょうか? これは私を狂気に駆り立てています。これを1時間グーグルで検索しましたが、解決策が見つかりません。考えられることは何でも試しましたが、何も結果が得られないようです。

ご協力いただきありがとうございます。

4

1 に答える 1

0

あなたはよくやったが、あと少しだ。まず、1 文字を表す各バイナリ シーケンスに FromDigits をマップ (/@) する必要があります。2 番目に (@@) StringJoin を FromCharacterCode の結果に適用して、元の連結文字列を取得します。Apply は、任意の式の Head を、その引数に適用される新しい関数に置き換えます。

一般的にフラストレーションを軽減するには:-)問題を休ませてから戻ってみるか、あなたがしたように助けを求めてください. 優雅な言葉で、次第に本能的になる。

In[9]:= string1 = 
  "The quick brown fox jumped over the lazy white dog.";

In[10]:= ToCharacterCode@string1

Out[10]= {84, 104, 101, 32, 113, 117, 105, 99, 107, 32, 98, 114, 111, \
119, 110, 32, 102, 111, 120, 32, 106, 117, 109, 112, 101, 100, 32, \
111, 118, 101, 114, 32, 116, 104, 101, 32, 108, 97, 122, 121, 32, \
119, 104, 105, 116, 101, 32, 100, 111, 103, 46}

In[11]:= IntegerDigits[%10, 2, 8]

Out[11]= {{0, 1, 0, 1, 0, 1, 0, 0}, {0, 1, 1, 0, 1, 0, 0, 0}, {0, 1, 
  1, 0, 0, 1, 0, 1}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 0, 0, 0, 
  1}, {0, 1, 1, 1, 0, 1, 0, 1}, {0, 1, 1, 0, 1, 0, 0, 1}, {0, 1, 1, 0,
   0, 0, 1, 1}, {0, 1, 1, 0, 1, 0, 1, 1}, {0, 0, 1, 0, 0, 0, 0, 
  0}, {0, 1, 1, 0, 0, 0, 1, 0}, {0, 1, 1, 1, 0, 0, 1, 0}, {0, 1, 1, 0,
   1, 1, 1, 1}, {0, 1, 1, 1, 0, 1, 1, 1}, {0, 1, 1, 0, 1, 1, 1, 
  0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 1, 1, 0, 0, 1, 1, 0}, {0, 1, 1, 0,
   1, 1, 1, 1}, {0, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 
  0}, {0, 1, 1, 0, 1, 0, 1, 0}, {0, 1, 1, 1, 0, 1, 0, 1}, {0, 1, 1, 0,
   1, 1, 0, 1}, {0, 1, 1, 1, 0, 0, 0, 0}, {0, 1, 1, 0, 0, 1, 0, 
  1}, {0, 1, 1, 0, 0, 1, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 1, 1, 0,
   1, 1, 1, 1}, {0, 1, 1, 1, 0, 1, 1, 0}, {0, 1, 1, 0, 0, 1, 0, 
  1}, {0, 1, 1, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 1, 1, 1,
   0, 1, 0, 0}, {0, 1, 1, 0, 1, 0, 0, 0}, {0, 1, 1, 0, 0, 1, 0, 
  1}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 1, 1, 0, 1, 1, 0, 0}, {0, 1, 1, 0,
   0, 0, 0, 1}, {0, 1, 1, 1, 1, 0, 1, 0}, {0, 1, 1, 1, 1, 0, 0, 
  1}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 0, 1, 1, 1}, {0, 1, 1, 0,
   1, 0, 0, 0}, {0, 1, 1, 0, 1, 0, 0, 1}, {0, 1, 1, 1, 0, 1, 0, 
  0}, {0, 1, 1, 0, 0, 1, 0, 1}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 1, 1, 0,
   0, 1, 0, 0}, {0, 1, 1, 0, 1, 1, 1, 1}, {0, 1, 1, 0, 0, 1, 1, 
  1}, {0, 0, 1, 0, 1, 1, 1, 0}}

In[14]:= FromDigits[#, 2] & /@ %11

Out[14]= {84, 104, 101, 32, 113, 117, 105, 99, 107, 32, 98, 114, 111, \
119, 110, 32, 102, 111, 120, 32, 106, 117, 109, 112, 101, 100, 32, \
111, 118, 101, 114, 32, 116, 104, 101, 32, 108, 97, 122, 121, 32, \
119, 104, 105, 116, 101, 32, 100, 111, 103, 46}

In[15]:= FromCharacterCode@# & /@ %14

Out[15]= {"T", "h", "e", " ", "q", "u", "i", "c", "k", " ", "b", "r", \
"o", "w", "n", " ", "f", "o", "x", " ", "j", "u", "m", "p", "e", "d", \
" ", "o", "v", "e", "r", " ", "t", "h", "e", " ", "l", "a", "z", "y", \
" ", "w", "h", "i", "t", "e", " ", "d", "o", "g", "."}

In[16]:= StringJoin @@ %15

Out[16]= "The quick brown fox jumped over the lazy white dog."
于 2013-01-02T16:58:00.440 に答える