实验记录
字节序不是“看起来像”:一次 16/32 位解释验证
用合成位模式、独立预期值和错误样例验证字节工作台的排列、整数与 float32 解释边界。
- 发布
- 2026-09-27
- 更新
- 2026-09-27
- 验证
- 2026-09-27
这篇记录验证的是字节工作台 v0.1 的底层 16/32 位解释规则;当前页面已改为输入 HEX 后即时列出多种候选格式和偏移。下列 53 项历史样例仍检查共用的字节序与浮点边界,不代表覆盖新页面全部格式。它不尝试从数据外观猜协议,也不替代设备资料。
验证方法
先独立写出 53 组合成参考用例,再让实际 TypeScript 核心逐项执行。参考集合包含 31 组有效输入和 22 组错误输入;自动化还补充了原始 UTF-16 错误位置、4096 长度边界、排列选项和特殊浮点分类。
实现会先把输入解析为确定的字节,再按所选的 AB、BA、ABCD、BADC、CDAB 或 DCBA 排列重排一次,最后通过 DataView 按显式大端读取。这样不会依赖运行测试的电脑本机采用哪种字节序。
几个固定检查点
| 原始字节 | 类型 / 排列 | 预期结果 | 检查目的 |
|---|---|---|---|
00 01 | uint16 / AB | 1 | 保持两字节顺序 |
00 01 | uint16 / BA | 256 | 交换两字节后再读取 |
FF FF | int16 / AB | -1 | 有符号二进制补码 |
3F 80 00 00 | float32 / ABCD | 1 | 有限单精度浮点 |
80 00 00 00 | float32 / ABCD | -0 | 负零不能与普通零混为一谈 |
7F 80 00 00 | float32 / ABCD | +Infinity | 特殊值需要明示而非 JSON null |
错误用例也属于结果的一部分。历史规则中,空输入、奇数个 HEX 数字、非法字符、空逗号项、字节数不匹配以及类型/排列不匹配均返回明确错误。当前即时分析不再要求用户选择类型或排列,仍不会删除字符、补零或截断后继续计算。
实际结果
2026-09-27 在 Node 26.10.0、pnpm 12.7.0 环境中,53 个独立字节参考用例全部通过实际核心函数。随后包含两个工具和公共交互的完整单元测试共 134 项通过,静态生成与 Chromium 桌面/移动回归也通过。
这里的“通过”只描述上述代码状态和自动化环境。它不代表已经在某个真实设备、协议或全部手机浏览器中验证,也不代表生产部署已经完成。
如何使用这个结论
如果设备资料明确写的是某种字节排列,可以用字节工作台在相应偏移查看该排列并复制分析记录。所有排列只是候选解释,不是在替用户判断“哪一种更可能正确”。
限制
- 本文的 53 项历史参考样例只覆盖 v0.1 的 16/32 位整数和 float32;当前页面另支持 8 位、BCD16、ASCII/BOOL 与有限长度滑动窗口。两者都不含 float64、64 位整数或反向编码。
- NaN、无穷和负零是位模式解释结果,不应直接当成设备状态诊断。
- 合成样例不来自公司、客户、兼职项目或现场数据。
- Playwright 的手机设备模拟不等于真实 Android、iOS Safari 或微信内置浏览器验证。
参考依据
- MDN:DataView.getFloat32(),复核日期 2026-09-27。用于确认按指定字节序从缓冲区读取 32 位浮点数的 API 语义。