PRJ - Write Int Union#
2024-05-29
/*
* 将int, float类型编码为字节,便于存储
*
* 在8位MCU中,能处理的基本数据单位为 Byte (8bit),这是历史遗留问题。同时 EEPROM 的读写、Serial, I2C 的收发也都以字节为单位。
*
* 将长于1字节的 int, long, float 等类型的数据在存取时,也势必按字节依次进行。
*
* - 这里将多字节的 data 分解为多个独立的字节 这一转换过程称为 编码;
* - 将与之相反的多个独立字节合并为原始的 data 的过程称为 解码。
*
* 这一对转换操作,非常适合用 C 语言的 union 实现,几乎没有开销,也不会出错。
*
*
*/
void setup() {
// encode Int to two byte
// 编码结构
typedef union {
int intNum;
byte binary[2];
} binaryInt;
// 被编码数据
binaryInt hi;
hi.intNum = 0x1234;
Serial.begin(9600);
delay(1000);
Serial.write(hi.binary, 2);
Serial.println("");
Serial.println(hi.intNum, HEX);
// decode
binaryInt hi2;
// 模拟读入的2个独立字节
hi2.binary[0] = 0x56; // 注意高低字节的顺序,例如,这里可能是错误的
hi2.binary[1] = 0x78;
// 可以按 int 型访问
Serial.println(hi2.intNum, HEX);
}
void loop() {
// put your main code here, to run repeatedly:
}