int x = 5;
cout<<(char)x;
Run Code Online (Sandbox Code Playgroud)
上面的代码在原始二进制文件中输出一个int x,但只有1个字节.我需要它做的是输出x作为二进制4字节,因为在我的代码中,x可以是0到2 ^ 32-1之间的任何地方,因为
cout<<(int)x;
Run Code Online (Sandbox Code Playgroud)
不做的伎俩,我该怎么做?
我需要从 Python 向 Arduino 发送浮点数据并获取相同的值。我想先从 Arduino 发送一些浮点数据。数据以 4 个连续字节的形式发送。我试图弄清楚如何收集这些连续的字节并在Python端(系统端)将其转换为正确的格式
Arduino代码:
void USART_transmitdouble(double* d)
{
union Sharedblock
{
char part[4];
double data;
} my_block;
my_block.data = *d;
for(int i=0;i<4;++i)
{
USART_send(my_block.part[i]);
}
}
int main()
{
USART_init();
double dble=5.5;
while(1)
{
USART_transmitdouble(&dble);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Python代码(系统端):
my_ser = serial.Serial('/dev/tty.usbmodemfa131',19200)
while 1:
#a = raw_input('enter a value:')
#my_ser.write(a)
data = my_ser.read(4)
f_data, = struct.unpack('<f',data)
print f_data
#time.sleep(0.5)
Run Code Online (Sandbox Code Playgroud)
使用struct上面代码中所示的模块可以打印浮点值。
50% 的时间,数据打印正确。但是,如果我弄乱time.sleep()或停止传输并重新启动它,则会打印出错误的值。我认为在这种情况下,解包的 4 个字节集是错误的。您知道我们可以在这里做什么吗?
除了使用 struct 模块向 Arduino 发送和接收浮点数据之外,还有其他想法吗?