python 语言, 详解fromstring 函数 ————-从字符串到Ascii 码的转换[亲测有效]

python 语言, 详解fromstring 函数 ————-从字符串到Ascii 码的转换[亲测有效]先来个小例子:test="abcdef"temp=numpy.fromstring(test,dtype=numpy.int8)print(temp)结果为:[979899100101102]这样就ji简单实现了从字符串到acsii码的转换下面做一下小的调整:test="abcdef"temp=numpy.fromstring(t…

大家好,欢迎来到IT知识分享网。

先来个小例子:

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呢?

python 语言, 详解fromstring 函数 -------------从字符串到Ascii 码的转换[亲测有效]

 报错了??

 其实呢原理是这样的……

首先在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.

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/24259.html

(0)
上一篇 2023-08-26 14:33
下一篇 2023-08-27 17:45

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信