使用IntegerDigits和ToCharacterCode我将String转换为2D二进制表。现在我需要反转这一点以及所有Mathematica帮助声称FromDigits是IntegerDigits的反转。但我无法回到原来的字符串。这是我的代码:
ConvTextTo[s_String]:= IntegerDigits[ToCharacterCode[s],2, 8];
ConvTextFrom[l_List]:= FromCharacterCode[FromDigits[l, 2]];
这会返回胡言乱语,我无法弄清楚原因。如果FromDigits确实是IntegerDigits的倒数,为什么这不起作用,为了上帝的缘故?这让我疯了,我现在用谷歌搜索了一个小时,我找不到解决办法。我已经尝试过任何我能想到的东西,似乎没有任何结果。
感谢您的帮助。
答案 0 :(得分:0)
你做得很好,但还有一点点。首先,您需要将(/ @)FromDigits映射到每个二进制序列,代表一个字符。第二次将(@@)StringJoin应用于FromCharacterCode的结果以获取原始连接的String。 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."