我有以下代码:
float a = 12.38;
float b = 24.38;
float c = 25.78;
float d = 20.00;
byte dataArray[4] = {a, b, c, d};
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println(dataArray[0]);
}
Run Code Online (Sandbox Code Playgroud)
我想要得到的输出是,12.38但我得到的是12. 浮点数被转换为整数。我使用字节数组的原因是因为我想使用字节数组作为使用 I2C 通信发送给主设备的消息:
Wire.beginTransmission(slaveAddress); //address is queued for checking if the slave is present
for (int i=0; i<4; i++)
{
Wire.write(dataArray[i]); //data bytes are queued in local buffer
}
Wire.endTransmission();
Run Code Online (Sandbox Code Playgroud)
然后,Master 将使用以下代码读取并转换回原始数组:
#include<Wire.h>
#define slaveAddress 8
byte dataArray[4];
void setup()
{
Wire.begin(slaveAddress);
Serial.begin(9600);
//-----------------------------------
Wire.onReceive(receiveEvent);
}
void loop()
{
Wire.onReceive(receiveEvent);
Serial.println(dataArray[1]);
}
void receiveEvent(int howmany)
{
for(int i=0; i<howmany; i++)
{
dataArray[i] = Wire.read();
}
}
Run Code Online (Sandbox Code Playgroud)
浮点型的大小为 4 个字节。因此,您的数组中需要 4 个字节来存储每个浮点数。如果你想传递 4 个浮点数,你需要 16 个字节
您可以将指针强制转换float为字节数组:
float a = 12.34
byte dataArray[4] = {
((uint8_t*)&a)[0],
((uint8_t*)&a)[1],
((uint8_t*)&a)[2],
((uint8_t*)&a)[3]
};
Run Code Online (Sandbox Code Playgroud)
并在接收端进行相反的操作:
float a;
((uint8_t*)&a)[0] = dataArray[0];
((uint8_t*)&a)[1] = dataArray[1];
((uint8_t*)&a)[2] = dataArray[2];
((uint8_t*)&a)[3] = dataArray[3];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4416 次 |
| 最近记录: |