2017-05-09 48 views
2

爲什麼「?」字符出現在以下十六進制值中? (我正在使用Python 3.5.1)「?」十六進制字符串轉換中的字符

我的目標是將string轉換爲十六進制值對。

string = b'3f8ccccd' 
hexpairs = binascii.unhexlify(string) 

hexpairs我得到的價值是這樣的:

b'?\x8c\xcc\xcd' 

什麼?字符的意義是什麼?我本來期望的輸出是:

b'\x3f\x8c\xcc\xcd' 
+6

其值對應於字符的ASCII被顯示爲這些字符的字節數。而0x3F是「?」的ASCII碼 –

+0

就是這樣!謝謝。 – Hefaestion

+0

@Hefaestion如果你想輸出寫爲你期望的字符串:'「」.join(「\\ x {}」。format(char.decode())for char in(string [i:i + 2] for我在範圍內(0,len(string),2)))。encode()' – Paradoxis

回答

1

The?由於unhexlify已將3F用作字節碼(這是「?」的ASCII碼),因此發生。因此,Python將這些字節顯示爲ASCII碼。

2

@Benedict回答的是正確的,下面是一些資源來幫助您瞭解:

最初基於英語字母表,如由ASCII圖表上方 ASCII編碼128個指定 字符爲七個位整數。[8]編碼的字符是數字0到9,小寫字母 a到z,大寫字母A到Z,基本標點符號,控制 源自電傳打字機的代碼和空格。例如,對於 示例,小寫字母j將變成二進制1101010和十進制106. ASCII包括128個字符的定義:33個非打印 控制字符(許多已過時)[9]影響文本和 空間的處理方式[10]和95個可打印的字符,包括 空間

對於?字符:

  • 二進制:00111111.在Python,chr(0b00111111)將輸出?
  • 八進制:77.在python chr(0o77)將輸出?
  • 十進制:63.在python chr(63)將輸出?
  • 十六進制:3F。在python chr(0x3f)將輸出?

正如你所看到的,你可以使用前綴像0b0o,或0xint之前使Python明白你不是用十進制數工作。

但是0x8C不在ascii表中(因爲它從0到127)。 0x8C是十進制數140,它不能顯示等值。

-1

這個問題可以通過下面給出的方式來解決。

hexastring = r'\xc3\xb9asdfsadf\xc3\xa9 asdfsdfsdf \xc3\x80 sdfsdfsdfdsf \xc3\xba' 

hexaValueList = re.findall(r'((?:\\x[a-f\d]{2})+)',hexastring) 
for hexaValue in hexaValueList: 
    beforeReplace = hexaValue 
    xReplace = re.sub(r'\\x','',hexaValue) 
    hex2String = bytearray.fromhex(xReplace).decode() 
    hexastring = re.sub(re.escape(beforeReplace),hex2String,hexastring) 

print (hexastring) 

回答

ùasdfsadféasdfsdfsdfÀsdfsdfsdfdsfú

相關問題