我是尝试阅读此类文档的新手,而我对VCDIFF指令的工作方式感到困惑,这是原始文档:
https://tools.ietf.org/html/rfc3284
此部分:
ADD: This instruction has two arguments, a size x and a sequence
of x bytes to be copied.
COPY: This instruction has two arguments, a size x and an address
p in the string U. The arguments specify the substring of U
that must be copied. We shall assert that such a substring
must be entirely contained in either S or T.
RUN: This instruction has two arguments, a size x and a byte b,
that will be repeated x times.
现在文档放了一个例子:
a b c d e f g h i j k l m n o p
a b c d w x y z e f g h e f g h e f g h e f g h z z z z
COPY 4, 0
ADD 4, w x y z
COPY 4, 4
COPY 12, 24
RUN 4, z
我不了解每个操作员所做的事情,我认为第一个副本是第一个“ abcd”,现在添加的内容包括“ wxyz”,现在我不太了解接下来的两个副本是如何工作的。
如果我认为有人可以显示该指令的内容(例如“此指令将字符串作为结果,下一个此字符串作为结果”)会很有用,则可以逐步比较:D
谢谢。
答案 0 :(得分:1)
在执行此操作时,您似乎知道输出的长度。在此“语言”中,输入和输出在“内存”中是连续的。因此,您从以下开始:
abcdefghijklmnop----------------------------
|<- S ->||<- T ->|
组合字符串中从偏移量0开始的第一个COPY
前4个字节:
ABCDefghijklmnopABCD------------------------
|<- S ->||<- T ->|
然后ADD
4个字节,实际上是w x y z
:
abcdefghijklmnopabcdWXYZ--------------------
|<- S ->||<- T ->|
然后COPY
4个字节,从偏移量4开始:
abcdEFGHijklmnopabcdwxyzEFGH----------------
|<- S ->||<- T ->|
然后从偏移量24开始COPY
12个字节。这有点棘手,因为偏移量24是我们刚刚写的“ efgh”,我们还没有写最后8个字节,但是如果您这样做的话一次一个字节无关紧要:
|<- from ->|
|<- to ->|
abcdEFGHijklmnopabcdwxyzefghEFGHEFGHEFGH----
|<- S ->||<- T ->|
最后有一个RUN
,由4个连续字节组成,全为“ z”:
abcdEFGHijklmnopabcdwxyzefghefghefghefghZZZZ
|<- S ->||<- T ->|