python 语言, 详解fromstring 函数 -------------从字符串到Ascii 码的转换
先來個小例子:
test = "abcdef" temp = numpy.fromstring(test,dtype=numpy.int8) print(temp)結果為:[ 97 ?98 ?99 100 101 102]
這樣就ji簡單實現了從字符串到acsii碼的轉換
?
下面做一下小的調整:
test = "abcdef" temp = numpy.fromstring(test,dtype=numpy.int16) print(temp)我們把int8 改成了int16,再看看運行結果:[25185 25699 26213]
誒,這就變了,為什么呢?
?
我們在更改一下,換成int32呢?
?報錯了??
?其實呢原理是這樣的……
首先在64位機器上,共有4種int:int8/int16/int32/int64; 有3種float:float16/float32/float64
對于int8和int32之間的差別我就不解釋了。
這個函數的原型是這樣的:fromstring(string, dtype=None, count=-1, sep='') ,
第一個參數string就是我們要處理的字符串,這里是test(“abcdef”),
dtype就是我們要轉換的類型,默認為float64,這個下面詳細說,
count表示要處理的字符串的長度,count默認為-1,為負值時按字符串的實際長度來處理,這里count為6;count為整數時 假設為4,這只處理字符串前4位,即‘abcd’;count值不可以大于字符串中實際字母的個數,否則報錯。
sep:當字符串中全為數字時,不管數字之間有沒有分隔符,只要sep='',那么數字就按ascii的值解析;如果之間沒有間隔,不管sep為不為空,數字也按ascii值解析;如果數字之間有間隔符, 而且sep='',數字按ascii值解析;如果數字之間有間隔符,sep等于間隔符,數字解析為數字值;?其中,空格不可以忽略,也作為一種間隔符。當字母數字混合時,如果有間隔符而且以數字開頭的字符串,sep==間隔符, # 只解析前幾個為數字,然后終止;其他情況都按ascii來解析。
下面我們來解釋一下dtype的yon用法:
首先我們明確一下,python中用8個bit位來存儲一個字符,所以字符串string中的每一個字符都占8位。
當dtype=int8時,用8個比特位來存儲一個整數,當fromstring函數讀取字符串string時,首先讀取一個dtype的位數,這里即8位int,所以是讀取一個字符來進行解析,這樣便實現了從字符到ascii碼的轉換。
當dtype=int16時,用16個bit位來存儲一個整數,當fromstring函數讀取字符串string時,首先讀取一個dtype的位數,這里即16位int,所以是讀取2個字符來進行解析,這里是讀取ab這兩個字符進行解析,字符a在低位 字符b在高位,2個字符當作一個來處理,a的ascii碼為97,二進制表示為:01100001,b的ascii碼為98,二進制表示為:01100010.,放在一起為(a在低位b在高位):011100010 01100001,整個二進制轉換為十進制即25185; ?接下來依次處理cd、ef,相同的處理方式
當dtype=int32時,用16個bit位來存儲一個整數,當fromstring函數讀取字符串string時,首先讀取一個dtype的位數,這里即32位int,所以是讀取4個字符來進行解析,但是這里有個問題,如果每次讀取4個字符進行處理,不能完全湊夠4的倍數,就是說先讀取abcd,在讀取時就只剩下ef了,不夠4了,所以這時候就要報錯啦。
當dtypei為其他類型,都是相同的道理,當字符的個數不能剛好湊齊時,就會報錯,顯示?string size must be a multiple of element size.
總結
以上是生活随笔為你收集整理的python 语言, 详解fromstring 函数 -------------从字符串到Ascii 码的转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop 详细配置文档
- 下一篇: 用Python对数学函数进行求值、求偏导