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))

 

import (
    "bytes"
    "encoding/binary"
)
 
 
// 整数转换成字节
func Int32ToBytes(x int32) []byte {
    bytesBuffer := bytes.NewBuffer([]byte{})
    binary.Write(bytesBuffer, binary.BigEndian, x)
    return bytesBuffer.Bytes()
}

// 字节转换成整数
func BytesToInt32(b []byte) int32 {
    bytesBuffer := bytes.NewBuffer(b)
    var x int32
    binary.Read(bytesBuffer, binary.BigEndian, &x)
    return x
}
 
 
 

 

 

字符流和字节流的区别 - 看!前方 - 博客园 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(); } }
复制代码

 

 

字符串转 字节

   b := []byte(s)
 
结构体转字节
        ses := Session{}
        ses.M = message
        ses.S = 123
        b, err := json.Marshal(ses)
 
 
 
func CharToASCII(a string) int {
    return int(a[0])
}

func ByteToASCII(a byte) int {
    return int(a)
}

func ByteToIndex(a byte) int {
    return ByteToASCII(a) - 97
}
 
        {name: "a", args: args{a: "a"}, want: 97},
        {name: "A", args: args{a: "A"}, want: 65},
 
 
 
        {name: "a", args: args{a: "a"[0]}, want: 97},
        {name: "A", args: args{a: "A"[0]}, want: 65},
 
 
ASCII_百度百科 https://baike.baidu.com/item/ASCII/309296

 

 

 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
 

 

 

 

posted @ 2022-07-04 13:44  papering  阅读(111)  评论(0编辑  收藏  举报