AI 之前,先有字节契约
传感器发送两个字节,软件转换为温度给 AI。包完整、长度正确,模型却看到不可能的数,或更隐蔽的“错误但合理”数值。我们用合成协议解释传输数据到物理值间的选择,不归于商业传感器或 EL-AI 设备规格。
两个字节本身并未定义整数
每字节八位,编码 0–255。十六进制 9c ff 对应 156、255。小端 u=156+256·255=65436,大端 u=256·156+255=40191。位没变,位置权重变了。倒序读数字只是帮助理解权重的类比,不能靠它猜协议。
字节序不是字节内位序,也不决定符号。十六位二补码有符号数中,u<32768 时值为 u,否则 u−65536。这是格式语义,不是读数奇怪时才修补。该字节给出小端有符号 −100、大端有符号 −25345。
编码到物理值之间还有尺度
假设协议每计数为 0.01 °C、偏移为零,T=s·v+o。s 单位是 °C/计数,v 为解释后的整数,o 用 °C。正确解码得 −1 °C,改序或符号则得 654.36、−253.45、401.91 °C。这是同一字节的四种解释,不是四次环境实测。下游 AI 无法自动知道预期契约。
| 格式 | 整数 | 温度(°C) |
|---|---|---|
| <h | -100 | -1.0 |
| <H | 65436 | 654.36 |
| >h | -25345 | -253.45 |
| >H | 40191 | 401.91 |

Python 的 < h 明确为标准两字节有符号小端,> h 为大端,H 无符号。原生 @ 依赖平台,复合格式还可能含对齐。外部交换应明确契约,不能假设两端机器约定一致。查阅文档版本与执行 Python 版本在附件中区分。
合理性检查也会放过错误
假设工作范围 −40 至 125 °C,首例三种误读会被拒绝。但 01 02 有符号小端为 5.13 °C,大端为 2.58,均合理。交换字节可逃过报警却改变 AI 决策。范围检查有用,但不能证明格式正确,还需已知协议样本。
字节完整性是另一性质。校验和可确认收发字节一致,却不验证符号、尺度或单位。本文未做传输或校验和实验;逻辑区别是消息完整不等于在错误接收契约下含义正确。
传感器状态与温度不是同类数据
协议可保留“无测量”编码。本例假设 0x7fff,即 ff 7f,作为哨兵,不能当 327.67 °C 输入 AI。decode 先查两字节长度,再查哨兵,之后处理符号与尺度,缺失返回 None,不自动换成零,因为零度也可能是真实测量。
脚本对全部 65536 个十六位有符号码比较手算、int.from_bytes 与 struct,验证所选转换,不证明真实传感器协议、电缆可靠或校准。两字节解析在模型中为常量工作量,但未测微控制器延迟、内存或能耗;执行环境为主机 Python 3.14.0。
首先要验证的是消息模型
网络尚未计算,温度就可能已错。字节序、符号、尺度、偏移与状态码须明确并版本化。连接嵌入式模型应沿全链核查已知字节与预期物理值,再测真实平台。更准确 AI 无法自动修复被反向解释的采集契约。
Python struct — Byte order, standard size and alignment.
import struct,json,sys
from pathlib import Path
raw=bytes.fromhex('9c ff');rows=[]
for order in ['little','big']:
for signed in [True,False]:
value=int.from_bytes(raw,byteorder=order,signed=signed);rows.append(dict(order=order,signed=signed,count=value,temperatureC=.01*value))
assert int.from_bytes(raw,'little',signed=True)==-100
def decode(data):
if len(data)!=2:raise ValueError('Expected exactly two bytes')
u=int.from_bytes(data,'little',signed=False)
if u==0x7fff:return None
signed=u if u<32768 else u-65536
return .01*signed
assert decode(raw)==-1 and decode(bytes.fromhex('ff 7f')) is None
try:decode(b'')
except ValueError:pass
else:raise AssertionError('Invalid length accepted')
for value in range(-32768,32768):
data=struct.pack('<h',value);u=data[0]+256*data[1];manual=u if u<32768 else u-65536
assert struct.unpack('<h',data)[0]==value==manual==int.from_bytes(data,'little',signed=True)
ambiguous=bytes.fromhex('01 02');both=[.01*int.from_bytes(ambiguous,x,signed=True) for x in ['little','big']]
assert both==[5.13,2.58]
r=dict(python=sys.version.split()[0],seed=None,scope='Hypothetical signed 16-bit sensor protocol, not a real sensor datasheet or device measurement',wireHex=raw.hex(' '),scaleCPerCount=.01,rows=rows,ambiguousHex=ambiguous.hex(' '),bothPlausibleC=both,exhaustiveCodesChecked=65536,reservedExample='0x7fff hypothetically reserved: must decode status rather than a numeric temperature')
Path(__file__).with_name('results.json').write_text(json.dumps(r,indent=2),encoding='utf8')
代码、数据与说明 · JSON. 教学计算使用 Python 3.14.0,图使用 Matplotlib 3.11.2。分析由 AI 辅助,不声称经过同行评审或人工审核。原创 ImageGen 封面仅作示意,不记录 EL-AI 人员、场所或实际安装。来源查阅于 2026 年 10 月 25 日。

