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.

  • 13
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值