2017-10-01 63 views
0

我正在使用python3。我想write()所有8位無符號整數爲1個字節的子 - 讓我告訴你我是什麼意思:使用Python 3,如何將8位無符號整數與高位1一起寫入(1個字節)?

>>> p = subprocess.Popen(["./some_program"], stdin=subprocess.PIPE) 
>>> x=0x80 
>>> p.stdin.write(str.encode(chr(x))) 
2 

這是不行的,我想輸出1個字節,而不是2.我想這是因爲默認編碼是utf-8。好,我試試

>>> p.stdin.write(str.encode(chr(x), "ascii")) 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
UnicodeEncodeError: 'ascii' codec can't encode character '\x80' in position 0: ordinal not in range(128) 

當然,也不行。

我怎麼p.stdin後整理到只有1個字節發送給子進程,從'\x00'所有無符號整數'\xff',正好爲1個字節與就像整數的8位表示的位?

+1

嘗試寫'B'\ x80''。 –

+0

@KlausD。是的,所以問題是,''\ x80''實際上不是一個字面字符串,而是另一種方法的輸出 - 我試圖寫一個SSCCE,可能太難了。 –

+0

@KlausD。好的,我更新了這個問題,請現在看看。 –

回答

1

你可以使用:

,不遺餘力的雙轉換
p = subprocess.Popen(["cat"], stdin=subprocess.PIPE) 
x = 0x80 
p.stdin.write(bytearray.fromhex(format(x, 'x'))) 

一個更好的方法是:

p = subprocess.Popen(["cat"], stdin=subprocess.PIPE) 
x = [ 0x80 ] 
p.stdin.write(bytearray(x)) 
+0

好吧,不,你不能將''\ x80'''轉換爲''80''這必須是一個通用的解決方案。讓我更新這個問題,使其不那麼「簡約」。 –

+0

這適用於任何1字節的值。這裏的'80'只是一個例子。你可以很容易地使用'fe' –

+0

我更新了問題。對不起,如果最初我不清楚我的意思。我只是儘量減少,可能太難了。請現在看看,謝謝。 –

相關問題