跳到主要内容

实验记录

字节序不是“看起来像”:一次 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 01uint16 / AB1保持两字节顺序
00 01uint16 / BA256交换两字节后再读取
FF FFint16 / AB-1有符号二进制补码
3F 80 00 00float32 / ABCD1有限单精度浮点
80 00 00 00float32 / ABCD-0负零不能与普通零混为一谈
7F 80 00 00float32 / 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 语义。