Я хотел бы отправить значения с плавающей точкой из кода C в код Python, используя именованные каналы. Я печатаю полученные значения в терминал на стороне Python, однако наряду с самим значением также отображаются символы тарабарщины.
Отверстие трубы:
void Init_FIFO(void)
{
// FIFO file path
char * bldc_fifo = "/tmp/bldc_fifo";
// Creating the named FIFO -- mkfifo(<pathname>, <permission>)
mkfifo(bldc_fifo, 0666);
// Open FIFO to write/read data
fd_fifo = open(bldc_fifo, O_RDWR | O_NONBLOCK);
//fd_fifo = open(bldc_fifo, O_WRONLY | O_RDONLY | O_NONBLOCK);
}
Для преобразования числа с плавающей запятой в строку я использую sprintf, а код приведен ниже,
void SendDataOverFifo(float angle)
{
char str[64];
unsigned char writeBuffer[] = "Hello!";
Init_FIFO();
sprintf(str, "%f\n", angle);
write(fd_fifo, str, sizeof(str));
//write(fd_fifo, writeBuffer, sizeof(writeBuffer));
close(fd_fifo);
}
Затем для получения кода на стороне Python я использую это
#!/usr/bin/python
import os
import errno
import time
FIFO = '/tmp/bldc_fifo'
try:
os.mkfifo(FIFO)
except OSError as oe:
if oe.errno != errno.EEXIST:
raise
print("Opening FIFO...")
with open(FIFO, encoding='utf-8', errors='ignore') as fifo:
print("FIFO opened")
while True:
time.sleep(0.1)
data = fifo.read()
print(data)
Вывод, который я получаю, выглядит примерно так
i-W? UOeiEU11.417070
Где должен быть правильный результат:
11,417070
Примечание: Если я попытаюсь отправить только «Привет!», Это будет работать без проблем.
Что мне здесь не хватает? Заранее спасибо.