簡體   English   中英

將轉義字符連接到字符串-Python

[英]Concatenating Escape Characters to A String - Python

我想用\\ x連接一個十六進制數字hh,以創建字符串“ \\ xhh”,然后將其放入列表並將其轉換為長字符串。 這是我當前的代碼,這會引發錯誤:

ValueError:無效的\\ x轉義

這個錯誤對我來說很有意義,因為我認為必須將\\ x附加到某個東西上才能使計算機識別它,而且我不確定如何做到這一點。 我想知道,類似“ \\” +“ x” + hh的方法,還有這樣做的更有效方法嗎?

這是我引起錯誤時的代碼:(注意-伏特,電流和校驗和值會有所不同。我只是在其中輸入示例值)

voltValues = [30, 30, 30]
currValues = [30, 30, 30]
checksumValues = [39, 33]
v1 = "\x" + voltValues[0]
v2 = "\x" + voltValues[1]
v3 = "\x" + voltValues[2]
c1 = "\x" + currValues[0]
c2 = "\x" + currValues[1]
c3 = "\x" + currValues[2]
cs1 = "\x" + checksumValues[0]
cs2 = "\x" + checksumValues[1]

list = [ "\x01", "\x30", "\x53", v1, v2, v3, c1, c2, c3, "\x46", "\x46", "\x46", "\x30", "\x30", "\x30", "\x32", "\x46", "\x46", cs1, cs2, "\x0D" ]
return ''.join(list)

我希望它返回“ \\ x01 \\ x30 \\ x53 \\ x30 \\ x30 \\ x30 \\ x30 \\ x30 \\ x30 \\ x46 \\ x46 \\ x46 \\ x30 \\ x30 \\ x30 \\ x32 \\ x46 \\ x46 \\ x46 \\ x39 \\ x33 \\ x0D”。

您可以通過說int(s, 16)將每個兩個字符的十六進制代碼s轉換為整數,然后使用chr()將其進一步轉換為字符來簡化整個過程。 例如, chr(int('4A', 16))返回'J' 您嘗試連接'\\x'失敗,因為在解釋器讀取時,像\\xAA這樣的十六進制代碼在Python代碼本身中被解釋為文字。

但是順便說一句,程序中的伏特值一開始並不以十六進制表示。 或作為字符串。 以下所有結果均相同:

v = 0x4A   # the proper way to write int literals in hex
print chr(v)

v = 74     # without the 0x, this is interpreted as decimal
print chr(v)

v = '4A'   # in quotes, it can be anything you like, but then you need int(v,16)
print chr(int(v, 16))

目前,Python的創建方式是創建一個值為“ \\ x”的字符串,然后嘗試向其添加30(這將失敗,因為它將串聯一個str和一個int)。

您想要做的是這樣的:

v1 = chr(int(str(voltValues[0]), 16))

這首先將根據您的值創建一個字符串,以便int()可以解析它。 然后,它在基數16處解析此字符串(將其解析為十六進制數據)。 之后,它將創建具有您剛剛創建的整數編碼的字符串。 這意味着

>>> chr(0x30)
'0'
>>> "\x30"
'0'
>>> chr(0x41)
'A'
>>> "\x41"
'A'

您要查看chr內置函數。

v1 = chr(voltValues[0])

將v1設置為“ \\ x1e”。

如果您希望將其設置為十六進制,則將voltValues [0]設置為0x30將產生v1'0 '0'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM