2013-01-18 30 views
2

我想使用tcl提供的udp包發送6字節的hex:「8000000004d2」的有效載荷。我能夠發送它,並在接收器電腦上,我可以讀取相同的數據。但在wireshark捕獲中,它顯示了12個字節的有效載荷,因爲它以ascii格式發送數據,如「38 30 30 30 30 30 30 30 32 32 33 34」。任何人都可以告訴我,數據確實以12字節傳輸,或者只有Wireshark將其解釋爲錯誤。如果數據傳輸爲12個字節,任何人都可以幫助我僅使用tcl udp軟件包以6個字節發送數據。僅供參考我給的UDP發送代碼如何使用tcl udp包發送有效載荷

UDP發送代碼:

namespace eval soc { 

variable s 
} 

set soc::s [udp_open] 
udp_conf $soc::s $IP_ADDR_RX $UDP_PORT 
fconfigure $soc::s -buffering none -translation binary 

set data 1234 
append hex [ format %04X [ expr $i | 0x8000 ] ] 
append hex [ format %08X [ expr $data ] ] 
puts -nonewline $soc::s $hex 

回答

3

如果你在十六進制的有效載荷,在發送之前解碼成字節數組:

# For tcl 8.5 and below 
puts -nonewline $soc::s [binary format H* $hex] 
# For tcl 8.6 and above 
puts -nonewline $soc::s [binary decode hex $hex] 

但有沒有理由擁有中間的十六進制表示法:您可以從一開始就創建字節數組。

set bytes [binary format SI [expr {$i|0x8000}] $data] 
puts -nonewline $soc::s $bytes 

(注:expr沒有{}產生另一輪替代解析之前,這通常是錯誤的語義,總是不好的性能)。

+0

感謝您的回覆。我想你已經解決了我的問題。謝謝你的其他建議。非常感謝。 – user1497818

+0

Tcl可以很好地處理二進制數據 - 它只是一個包含字節的字符串 - 並且自從Tcl 8.0以來已經完成。 –

相關問題