ord chr 字符串切片 字母转数字 字符 字节 字符流 字节流
python转数字
l = ['[100,600)', '[600,1000)', '[1000,1001)', '(-inf,-100)', '(12323,+inf)']
def f(i: str):
for r in {'(', ')', '[', ']'}:
i = i.replace(r, '')
lst = i.split(',')
try:
return float(lst[0])
except:
return float(lst[1])
x = sorted(l, key=lambda i: f(i))
字符流和字节流的区别 - 看!前方 - 博客园 https://www.cnblogs.com/lewisliu111/p/10140253.html
其实,一直被这个问题所困扰,一直都没有解决,今天又碰到了这个问题,看来是必须要解决了,下面就对其进行对比一下
1、在Python、Java中都有明确区分BytesIO和StringIO、有的语言好像并没有区分这个,所以它是需要将String编码后(如UTF-8),编码成Bytes再进行IO
Python如下:
# Python Code
# StringIO from io import StringIO f = StringIO() # BytesIO from io import BytesIO f = BytesIO()
Java目前还没有学习,暂留
其实BytesIO、StringIO都是IO,只是IO的东西不同,一个是IO bytes,一个是IO String,只是IO的东西不同,但是为什么要区分不同,在什么时候使用BytesIO,什么时候用StringIO,相信很多的人有着很大的迷惑,面对两难的抉择,无法选择。接下来我们来仔仔细细地分析一下。
字节流:普通的二进制流,也就是bits流,又因为在大多数情况下,我们的数据类型基本上使用8bits(1 byte)的整数倍来表示,所以字节是数据的最小基本单位
字符流:字节流的基础按照字符编码处理,处理的是char
因为有各种各样的不同的编码规范:ASCII、UTF-8等等
那么什么是后用BytesIO、什么时候用StringIO。。。emm,接下来就是了:
当我们读取Binary File时,应该用BytesIO,当我们读取StringIO时,应该用StringIO,当然你也可以用BytesIO,通过编码再写进去,但是这样很麻烦
当我们解决编码问题的时候,我们应该用ByteIO,无论要传输的是不是Binary或者String。比如利用Socket进行网络传输的时候,因为我们往往不知道对面电脑的编码方式,所以我们需要先将String decode成bytes,然后将bytes传过去,对面再Encoding成string,这样避免了乱码的情况,所以很多语言也就将stringIO和bytesIO独立开来,在某些API中甚至需要你传一个bytes型的参数。
世界上本没有字符流,因为我们在电脑中识字也就有了字符流。
就这样:
// C# Code
class Program { static void Main(string[] args) { byte[] a = { 0x48, 0x65, 0x6C, 0x6C, 0X6F}; Console.WriteLine(Encoding.UTF8.GetString(a)); Console.ReadKey(); } }
字符串转 字节
golang中的ord和chr的实现_raoxiaoya的博客-CSDN博客 https://blog.csdn.net/raoxiaoya/article/details/115250015
ord: 转换字符串第一个字节为 0-255 之间的值,也就是 ASCII 字符集;比如 A -> 65,
mb_ord: ord的多字节字符支持,也就是 unicode 字符集,比如 我 -> 25105
chr: 将 0-255 之间的值匹配 ASCII 字符集中的单个字符;比如 65 -> A,
mb_str: chr的多字节支持,将一个整数匹配 unicode 字符集中的单个字符;比如 25105 -> 我,
而golang就是天然支持 unicode 字符集的,所以只需要关注单字节和多字节字符问题。
string(): 将数值转换成字符,参照 unicode 字符集,对应 mb_str。
fmt.Println(string(25105)) // 我
fmt.Println(string(65)) // A
golang中的字符串本身就是字节数组,而且是单字节的,对应 ord。
s := "abcdefg"
fmt.Println(s[0]) // 97
s = "我们"
fmt.Println(s[0]) // 230 不是 25105
将字符转换成整数则需要考虑多字节字符,使用rune来转换,对应 mb_ord。
s1 := []rune("我们")
fmt.Println(s1[0]) // 25105