考慮以下幾點:可以解析二進制文件!在Rebol 2中捕獲一個二進制文件!而不是一個字符串! (如在Rebol 3中)?
>> bin: to-binary {Rebol}
== #{5265626F6C}
>> parse/all bin [s: to end]
== true
我希望s
已經捕捉到的二進制序列的頭部,並類型BINARY的!在雷博爾3是這種情況:
>> type? s
== binary!
>> s == bin
== true
在雷博爾2,似乎解析必須轉換的數據爲字符串(或至少是「成像」的二進制作爲字符串罩下和!不比較相等)
>> type? s
== string!
>> s == bin
== false
由於雷博爾2不是Unicode,二進制字節串和字符串基本上都是相等的。但隨着雷博爾3的Unicode的我估計你可能最終得到了非常不同的行爲,如果你寫道:
parse/all to-string bin [s: to end]
,因爲它會開始解釋多字節序列劃分成字符串編碼,這不,如果你真的想要的是工作未解釋的字節。 :-(
如果想要編寫在解析BINARY時同樣適用於Rebol 2或Rebol 3的代碼,您將如何解決此問題?(理想情況下,使Rebol 2的行爲更像3,當然。 )
它得到你是一個二元的,在這個簡單的例子中。但是我說的是更復雜的代碼,它需要進行一致的位置比較,複製範圍並期望這些範圍處於相同的二進制序列中,並且還可以使用':s'等操作解析中的序列位置。*到最後一個要求,更改's'本身並不是一個選項......你在'parse bin [s:to end(s:to binary!s):s]')*上得到一個錯誤雖然類型不是兼容,請參閱我對該系列修改的更新,指出它實際上是引擎蓋下的相同數據... – HostileFork