bitutil

package
v0.0.0-...-fda1b34 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 24, 2022 License: Apache-2.0 Imports: 3 Imported by: 0

Documentation

Overview

Package bitutil 该文件定义了若干对01比特的操作方法:

  • 异或运算
  • 与运算
  • 或运算
  • 检查给定字节切片中是否存在值为非0的字节

Package bitutil 该文件定义了对字节切片进行解压缩的方法:

  • 压缩:CompressBytes
  • 解压:DecompressBytes

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ANDBytes

func ANDBytes(dst, a, b []byte) int

ANDBytes ♏ |作者:吴翔宇| 🍁 |日期:2022/10/27|

ANDBytes 方法接受3个入参,分别是dst、a、b三个字节切片,该方法实现对给定的a、b两个字节切片进行与运算,并将结果 存储到dst中,如果运行该方法的计算机架构属于{386、amd64、ppc64、ppc64le、s390x}这其中的某一个,则执行快速算 法 fastANDBytes 来进行与运算,否则采用常规的算法 safeANDBytes。该方法的返回值表示对a或b中多少个字节进行了与 运算。

例如:输入a=[12 34 28] b=[3 67 98 55],经过运算,dst=[0 2 0]
12 xor 3 -> 1100 & 0011 -> 0000 -> 0
34 xor 67 -> 0100010 & 1000011 -> 0000010 -> 2
28 xor 98 -> 0011100 & 1100010 -> 0000000 -> 0

func CompressBytes

func CompressBytes(data []byte) []byte

CompressBytes ♏ |作者:吴翔宇| 🍁 |日期:2022/10/28|

CompressBytes 调用 bitsetEncodeBytes 方法实现对给定字节切片进行压缩,压缩过程分三种情况:

  1. 如果给定的data是一个空切片,压缩结果就是nil
  2. 如果给定的data长度等于1,并且里面唯一的字节等于0,压缩结果就是nil,否则就是data本身
  3. 如果给定的data长度大于1,那么压缩结果的结构如下 |...|标记nonZeroBitset_1中非0字节位置的比特数组nonZeroBitset_2|标记data中非0字节位置的比特数组nonZeroBitset_1|data中非0字节拼接在一起| 例如data是一个长度为32的字节切片,它的第4、14、24下标处的值分别等于1、2、3,其余位置的值都等于0,即 data = [0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0] 压缩结果:[208 1 2 128 1 2 3]

func DecompressBytes

func DecompressBytes(data []byte, target int) ([]byte, error)

DecompressBytes ♏ |作者:吴翔宇| 🍁 |日期:2022/10/28|

DecompressBytes 方法接受两个参数,第一个参数是经过压缩后的字节切片,第二个参数表示压缩前原始字节切片的长度, 该方法实际上是调用 bitsetDecodePartialBytes 方法来解压数据。

func ORBytes

func ORBytes(dst, a, b []byte) int

ORBytes ♏ |作者:吴翔宇| 🍁 |日期:2022/10/27|

ORBytes 方法接受3个入参,分别是dst、a、b三个字节切片,该方法实现对给定的a、b两个字节切片进行或运算,并将结果 存储到dst中,如果运行该方法的计算机架构属于{386、amd64、ppc64、ppc64le、s390x}这其中的某一个,则执行快速算 法 fastORBytes 来进行与运算,否则采用常规的算法 safeORBytes。该方法的返回值表示对a或b中多少个字节进行了或 运算。

例如:输入a=[12 34 28] b=[3 67 98 55],经过运算,dst=[15 99 126]
12 xor 3 -> 1100 | 0011 -> 0000 -> 15
34 xor 67 -> 0100010 | 1000011 -> 0000010 -> 99
28 xor 98 -> 0011100 | 1100010 -> 0000000 -> 126

func TestBytes

func TestBytes(p []byte) bool

TestBytes ♏ |作者:吴翔宇| 🍁 |日期:2022/10/27|

TestBytes 方法接受一个字节切片p作为输入参数,该方法实现对给定的字节切片p进行检查,判断p中 是否存在值为非0的字节,如果存在,直接返回true,否则返回false。如果运行该方法的计算机架构属 于{386、amd64、ppc64、ppc64le、s390x}这其中的某一个,则执行快速算法 fastTestBytes 进行计算,否则采用常规的算法 safeTestBytes。

func XORBytes

func XORBytes(dst, a, b []byte) int

XORBytes ♏ |作者:吴翔宇| 🍁 |日期:2022/10/27|

XORBytes 方法接受三个入参,分别是dst、a、b三个字节切片,该方法实现对给定的a、b两个字节切片进行异或运算,并将结果 存储到dst中,如果运行该方法的计算机架构属于{386、amd64、ppc64、ppc64le、s390x}这其中的某一个,则执行快速算法 fastXORBytes 来进行异或运算,否则采用常规的算法 safeXORBytes。该方法的返回值表示对a或b中多少个字节进行了异或运算。

例如:输入a=[12 34 28] b=[3 67 98 55],经过运算,dst=[15 97 126]
12 xor 3 -> 1100 ^ 0011 -> 1111 -> 15
34 xor 67 -> 0100010 ^ 1000011 -> 1100001 -> 97
28 xor 98 -> 0011100 ^ 1100010 -> 1111110 -> 126

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL