Antes de la IA hay un contrato de bytes
Un sensor manda dos bytes convertidos a temperatura para IA. Paquete íntegro y longitud correcta, pero el valor es imposible o, peor, erróneo y plausible. Examinamos las elecciones entre dato y valor físico con protocolo sintético, sin atribuir especificaciones a sensores comerciales ni EL-AI.
Dos bytes no especifican por sí solos un entero
Cada byte de ocho bits codifica 0–255. 9c ff hexadecimal son 156,255. Little-endian: u=156+256·255=65436; big-endian: u=256·156+255=40191. No cambian bits, sino pesos posicionales. Leer cifras en otro orden es analogía de pesos, no modo de adivinar el protocolo.
Orden de bytes no es orden de bits interno ni define signo. En complemento a dos de dieciséis bits, u<32768 representa u; si no, u−65536. Es semántica del formato, no reparación de lecturas extrañas. Obtenemos −100 con signo little-endian y −25345 con signo big-endian.
Entre código y valor físico aún hay escala
Nuestro protocolo hipotético usa 0,01 °C por cuenta y offset cero: T=s·v+o. s es °C/cuenta, v entero interpretado y o offset en °C. 9c ff correcto da −1 °C; otras elecciones dan 654,36, −253,45 o 401,91. Son interpretaciones, no medidas ambientales. La IA no recupera automáticamente el contrato previsto.
| Formato | Entero | Temperatura (°C) |
|---|---|---|
| <h | -100 | -1.0 |
| <H | 65436 | 654.36 |
| >h | -25345 | -253.45 |
| >H | 40191 | 401.91 |

Python explicita < h como entero estándar con signo de dos bytes little-endian, > h big-endian y H sin signo. @ nativo depende de plataforma e incluye alineación en formatos compuestos. Intercambiar exige contrato explícito, no suponer máquinas iguales. Distinguimos documentación consultada de Python ejecutado.
La plausibilidad puede dejar pasar errores
Un rango hipotético de −40 a 125 °C rechaza tres lecturas iniciales. Pero 01 02 da 5,13 °C little-endian y 2,58 big-endian, ambas plausibles. Intercambiar bytes puede no alarmar y cambiar la decisión. El rango ayuda, pero no prueba formato: hacen falta ejemplos conocidos del protocolo.
Integridad es otra propiedad: un checksum confirma bytes coincidentes, no signo, escala o unidades. No ejecutamos transmisión ni checksum; preservar mensaje no preserva significado con un contrato receptor distinto.
Estado y temperatura son tipos distintos
Un protocolo puede reservar código de ausencia. Suponemos 0x7fff, bytes ff 7f, en vez de dar a IA 327,67 °C. decode comprueba longitud, sentinela, signo y escala; devuelve None para ausencia. No sustituye por cero, temperatura válida y distinta de faltar.
El script compara conversión manual, int.from_bytes y struct en los 65536 códigos de dieciséis bits. Verifica conversión elegida, no protocolo real, cable o calibración. Analizar dos bytes cuesta trabajo constante aquí, sin medir latencia, memoria o energía en microcontrolador. Se ejecutó en host Python 3.14.0.
El primer modelo que verificar es el del mensaje
La temperatura puede fallar antes de calcular la red. Orden, signo, escala, offset y estados deben ser explícitos y versionados. Conectar IA embebida exige comprobar bytes conocidos y valores físicos por toda la ruta, y medir después la plataforma real. Mejor IA no repara sola un contrato invertido.
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')
Código, datos e instrucciones · JSON. Cálculos didácticos ejecutados con Python 3.14.0; figuras con Matplotlib 3.11.2. Análisis asistido por IA, sin afirmar revisión por pares ni humana. Portada original ImageGen ilustrativa: no documenta personas, sedes ni instalaciones de EL-AI. Fuentes consultadas el 25 de octubre de 2026.

