2016-03-01 16 views
0

我有一個字符串,其編號爲5:240。從那我必須從他們的十六進制表示字符串發送數字。該數字必須在兩個字節的範圍內。但是,我想在我的串行端口上發送確切的表示,如'\x00\x05\x00\xf0'。有人能幫我解決這個問題嗎?將字符串轉換爲十六進制以發送串行通信

我曾嘗試以下代碼段,但是沒有成功:

b='5:240' 
b = b.split(':') 
for i in range(len(b)): 
    print hex(int(b[i])) 
    print len(hex(int(b[i]))) 

結果:

0x5 
3 
0xf0 
4 

輸出顯示的十六進制轉換,但它不可能對我來說,把它的串行端口上,原因長度是變化的。任何人都可以解決這個問題嗎?

回答

1

答:從塞爾丘克的答案參考。我得到了以下解決方案。

def word_hex(w): 
    a = int(w/256) 
    b = w % 256 
    return "{0:#0{1}x}{2:#0{3}x}".format(a,4,b,4).replace("0x", "") 

b='5:240' 
b = b.split(':') 
for i in b: 
    print(word_hex(int(i)).decode("hex")) 
1

可以使用hexadecimal format specifier, x

def word_hex(w): 
    a = int(w/256) 
    b = w % 256 
    return "{0:#0{1}x}{2:#0{3}x}".format(a,4,b,4).replace("0x", "\\x") 

b='5:240' 
b = b.split(':') 
for i in b: 
    print(word_hex(int(i))) 

打印

\x00\x05 
\x00\xf0 
+0

謝謝你的回覆。但它只是將數字轉換爲十六進制數字,我必須在串行端口上發送數字。對於你的解決方案,它給了我'len(word_hex(int(i)))= 8',它在端口上發送8個字符。我只需要2個字節(字符)的特定數字。 – abhi1610

+0

好的。我在腳本中進行了一些調整後得到了它。爲了獲得所需的輸出,只需刪除'「\\ x」'保持空白也必須編輯行。 'print(word_hex(int(i)))。encode(「hex」)'。 – abhi1610

相關問題