我正在使用Pro Mini作为I2C从站,它计算双倍。 ESP8266 WiFi模块请求此双倍,并通过I2C逐字节发送。
现在我正试图在另一端重新组装双重但它不起作用。 ESP8266上运行的当前代码:
// ABOVE SETUP
union {
byte bytes[4];
double value;
} bytedouble;
// IN LOOP
while(Wire.available()){
byte read = Wire.read();
bytedouble.bytes[num] = read;
num++;
}
Serial.println(bytedouble.value); // Returns ovf/overflow
我发现Arduino Pro Mini上的double
是4字节但ESP8266上有8个字节。我可以转换吗?
答案 0 :(得分:0)
ESP8266是32位处理器,因此sizeof(int)
为4且sizeof(double)
为8.在ATmega328 sizeof(int)
为2且sizeof(double)
为4.但是,在两个处理器上{{} 1}}是4,这就是为什么你可以使用你在评论中提到的那种解决方法。
由于您要处理整数,最好在ESP8266的代码中使用sizeof(float)
或int
代替uint32_t
,因此长度将与Arduino的double
。这样你就可以避免使用浮点数来生成相当多的不必要的代码字节。