进阶 docs.cloudreve.org 2026-10-17 18:46:57 · 20 阅读

第37章 Boolset 编码与解码详解

Boolset 编码与解码

Boolset 是一种用于表示布尔值集合的编码方法。它将一组布尔值转换为字符串,便于存储和传输。在 Cloudreve 的 API 中,Boolset 通常用于权限设置,例如用户组权限和文件权限。

内部表示

BooleanSet 类型本质上是一个字节切片([]byte)。在该切片中,每一位代表一个布尔值(权限开关)。

第 0 个标志位对应字节切片中第 0 个字节的第 0 位。 第 1 个标志位对应字节切片中第 0 个字节的第 1 位。 ... 第 7 个标志位对应字节切片中第 0 个字节的第 7 位。 第 8 个标志位对应字节切片中第 1 个字节的第 0 位。 依此类推...

位值为 1 表示对应的标志为真(启用),为 0 则表示假(禁用)。

编码过程

确定最大索引:找出所有待表示标志中的最大索引 max_n。 计算字节数:确定所需的字节数量。至少需要 $\lfloor max\_n / 8 \rfloor + 1$ 个字节来容纳所有标志。 初始化字节序列:创建具有所需字节数的序列,并将所有字节初始化为 0。 设置标志:对于每个需要设为真的标志 n: 找到字节序列中的第 $\lfloor n / 8 \rfloor$ 个字节(byte_index)。 计算该字节内的位索引:bit_index = n % 8。 将该字节的第 bit_index 位设为 1。这通常通过按位或操作实现:byte[byte_index] = byte[byte_index] | (1 << bit_index)。 Base64 编码:将最终的字节序列编码为 Base64 字符串。

解码过程

Base64 解码:首先将 Base64 字符串解码回原始字节序列。 检查标志:要检查特定标志 n 的状态(真或假): 计算字节索引:byte_index = $\lfloor n / 8 \rfloor$。 边界检查:检查 byte_index 是否在字节序列的有效范围内。如果超出范围,该标志隐含为假(因为从未被设置过)。 如果 byte_index 有效,定位序列中的第 byte_index 个字节。 计算位索引:bit_index = n % 8。 检查该字节第 bit_index 位的值。这通常通过按位与操作实现:is_set = (byte[byte_index] & (1 << bit_index)) != 0。 如果结果非零,标志 n 为真;否则为假。

编程语言实现

Golang

```golang // 从字符串加载 bs, err := boolset.FromString("/f8B") if err != nil { return nil, err }

// 读取第 5 个标志位 fmt.Println(bs.Enabled(5))

// 设置第 1 个标志位 boolset.Set(1, true, bs)

// 保存为字符串 encoded, err := bs.String() if err != nil { return nil, err } ```

TypeScript

```typescript // 从字符串加载 const bs = new Boolset("/f8B");

// 读取第 5 个标志位 console.log(bs.enabled(5));

// 设置第 1 个标志位 bs.set(1, true);

// 保存为字符串 const encoded = bs.toString(); ```

标志定义

用户组权限

标志位:0,描述:是否为管理员 标志位:1,描述:是否为匿名用户组 标志位:2,描述:可分享文件 标志位:3,描述:可访问 WebDAV 标志位:4,描述:可执行服务端批量下载 标志位:5,描述:可执行归档压缩任务 标志位:6,描述:可启用 WebDAV 代理 标志位:7,描述:可下载他人的分享 标志位:8,描述:可免费下载分享 标志位:9,描述:可执行远程下载 标志位:10,描述:可迁移存储策略 标志位:11,描述:使用重定向直链 标志位:12,描述:可使用高级删除选项 标志位:13,描述:可选择特定节点处理任务 标志位:14,描述:可为匿名用户设置更高的分享权限 标志位:17,描述:使用唯一直链(仅在启用重定向直链时有效)

文件系统能力

标志位:0,描述:创建文件 标志位:1,描述:重命名文件或文件夹 标志位:2,描述:设置权限 标志位:3,描述:移动到“我的文件” 标志位:4,描述:移动到分享目录 标志位:5,描述:移动到回收站 标志位:6,描述:上传文件 标志位:7,描述:下载文件 标志位:8,描述:更新元数据 标志位:9,描述:列出子项 标志位:10,描述:生成缩略图 标志位:11,描述:复制到“我的文件” 标志位:12,描述:复制到分享目录 标志位:13,描述:复制到回收站 标志位:14,描述:永久删除 标志位:15,描述:锁定文件或文件夹 标志位:16,描述:软删除(移动到回收站) 标志位:17,描述:从回收站恢复 标志位:18,描述:创建分享 标志位:19,描述:获取文件或文件夹信息 标志位:20,描述:版本控制 标志位:21,描述:挂载存储策略 标志位:22,描述:传输存储策略 标志位:23,描述:进入文件夹 标志位:24,描述:修改属性(例如查看设置)

文件权限

标志位:0,描述:读取 标志位:1,描述:更新 标志位:2,描述:创建 标志位:3,描述:删除 标志位:4,描述:分享 标志位:5,描述:列出

节点功能

标志位:0,描述:保留,请勿使用 标志位:1,描述:创建压缩文件 标志位:2,描述:解压文件 标志位:3,描述:远程下载 标志位:4,描述:传输存储策略

WebDAV 账户设置

标志位:0,描述:读取 标志位:1,描述:反向代理

评论 (0)