Golang:计算两个字节数组之间的差异并修补数组

时间:2016-06-05 10:37:32

标签: arrays go byte diff patch

我正在尝试找出两个字节arar之间的差异并存储delta。

我已阅读此文档https://golang.org/pkg/bytes/,但我没有找到任何显示如何找到差异的内容。

感谢。

1 个答案:

答案 0 :(得分:0)

听起来你只想要一个带有两个字节切片的函数,并返回一个包含输入切片中每个元素差异的新切片。下面的示例函数断言输入切片都是非零且具有相同的长度。它还返回一个int16s片段,因为字节差异的范围是[-255,255]

package main

import "fmt"

func main() {
  bs1 := []byte{0, 2, 255, 0}
  bs2 := []byte{0, 1, 0, 255}
  delta, err := byteDiff(bs1, bs2)
  if err != nil {
    panic(err)
  }
  fmt.Printf("OK: delta=%v\n", delta)
  // OK: delta=[0 1 255 -255]
}

func byteDiff(bs1, bs2 []byte) ([]int16, error) {
  // Ensure that we have two non-nil slices with the same length.
  if (bs1 == nil) || (bs2 == nil) {
    return nil, fmt.Errorf("expected a byte slice but got nil")
  }
  if len(bs1) != len(bs2) {
    return nil, fmt.Errorf("mismatched lengths, %d != %d", len(bs1), len(bs2))
  }

  // Populate and return the difference between the two.
  diff := make([]int16, len(bs1))
  for i := range bs1 {
    diff[i] = int16(bs1[i]) - int16(bs2[i])
  }
  return diff, nil
}
相关问题