如RFC1071中所述,在奇数字节的情况下计算校验和时,应在最后一个字节中添加一个额外的 0 字节:
但在“C”代码算法中,只添加了最后一个字节:
上面的代码确实适用于 [Z,0] 等于 Z 的小端机器,但我认为在 [Z,0] 等于 Z*256 的大端机器上存在一些问题。
所以我想知道 RFC1071 中的示例“C”代码是否仅适用于小端机器?
-------------新添加-------------
RFC1071 中描述了另一个“将总和分成两组”的示例:
我们可以在这里取数据 (addr[]={0x00, 0x01, 0xf2}) 例如:
这里,“标准”表示公式[ 2 ]中描述的情况,而“C-code”表示C代码算法的情况。
正如我们所看到的,在“标准”情况下,最终总和为 f201,而不管字节序差异如何,因为“交换”之后的 [Z,0] 的抽象形式没有字节序问题。但它在“C 代码”情况下很重要,因为无论是大端还是小端,f2 始终是低字节。
因此,校验和是可变的,具有不同字节序的相同数据(地址和计数)。