printf raw data - получить printf или напечатать, чтобы НЕ отправлять символы - PullRequest
3 голосов
/ 03 декабря 2011

У меня есть плата Xilinx Virtex-II Pro FPGA, подключенная через RS232 к iRobot Create.

iRobot принимает поток целых байтов в качестве команд.

Я обнаружил, что printf на самом деле отправляет через последовательный порт (Hypterminal может принимать все, что я печатаю), и я полагаю, что могу использовать printf для отправки своих данных в iRobot.

Проблема в том, что printf, похоже, форматирует данные для вывода в формате ascii, но мне очень хотелось бы просто отправить необработанные данные.

Я бы хотел что-то вроде:

printf(%x %x %x, 0x80, 0x88, 0x08);

Но вместо того, чтобы отформатировать шестнадцатеричное значение, я бы хотел, чтобы оно было фактическим отправленным значением 0x80.

Есть идеи?

Ответы [ 3 ]

9 голосов
/ 03 декабря 2011

Вместо этого используйте формат "%c%c%c".

9 голосов
/ 03 декабря 2011

Использование fwrite:

char buf[] = { 0x80, 0x80, 0x80 };

fwrite(buf, 1, sizeof(buf), stdout);

Вы можете записать в любой дескриптор файла;stdout является просто примером для зеркалирования вашей printf.

В системе Posix вы также можете использовать платформенную write функцию, которая записывает вдескриптор файла.

3 голосов
/ 03 декабря 2011

Вы бы вместо этого использовали fwrite. Printf по определению является принтером ascii.

char buf[] = {0x80, 0x80, 0x80};
fwrite(buf, 1, 3, stdout);

кажется, что вы хотите.

...