2011-12-03 99 views
3

我有一個通過RS232連接到iRobot創建的Xilinx Virtex-II Pro FPGA板卡。printf原始數據 - 獲取printf或打印以不發送字符

iRobot將一串字節整數作爲命令。

我發現printf實際上會通過串口發送(Hypterminal能夠接收我打印的任何東西),我想我可以使用printf將數據發送給iRobot。

問題是,printf似乎格式化ascii輸出的數據,但我真的很喜歡它只是發送數據原始。

我想是這樣的:

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

但相反的十六進制格式得到,我想它是實際發送的0x80的值。

任何想法?

+0

你的編譯器是否支持:'printf(0x80,0x88,0x08);'? – Jeff

+0

或'printf(「」,0x80,0x88,0x08);' – Jeff

回答

9

使用fwrite

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

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

可以寫入任何文件句柄; stdout只是一個鏡像您的printf的例子。

在Posix系統上,您還可以使用寫入文件描述符的平臺特定的write函數。

+0

這很好!但我不知道我的stdout的地址,...我想我可以嘗試挖掘。我的想法是隻使用RS232 RX輸出的內存地址......這聽起來像是正確的想法嗎? – ZacAttack

+0

爲什麼你需要任何地址?你很樂意早些使用'printf',這與'fprintf(stdout,...)'一樣'...現在有什麼問題?你絕對可以*不*寫入任何隨機數。它必須是您以某種方式合法獲得的「FILE *」。 –

+0

呃......我一直在使用printf,但我似乎無法包含stdio.h庫,我的編譯器似乎並不喜歡它......我......我在失利。使用標準輸出給我一個錯誤,並且包括庫也會給出一個錯誤。 – ZacAttack

3

您可以使用fwrite來代替。 Printf的定義是一個ascii打印機。

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

似乎是你想要的。

9

改爲使用格式"%c%c%c"