注意:
1 :二进制字符中不能有1 或0 之外的字符。
b'sfsf' 是字节数组, 不是二进制字符串。
2 :十六进制字符中不能有 0 ~ f 以外的字符。
'uds' 是普通字符串, 不是十六进制字符串
十六进制字符串长度必须是偶数,也就是说,十六进制字符串中的 '1' , 必须写成'01' 的形式。
'10d' 是普通字符串, 不是十六进制字符串
1、python中二进制表示形式有两种:
bytes 是字节数组 每个元素都在 0 ~ 255 之间。
二进制字符串是二进制的字符串表示形式, 字符串中的字符都是1 或0 。
01 : 以 b'' 开头字符串,这是bytes 字节数组, 显示时每个元素使用十六进制表示, 可以使用索引取值。
bytes ( [ 15 ] ) - - - > b'\x0f'
'19fsh' . encode( ) - - - > b'19fsh'
'大海' . encode( ) - - - > b'\xe5\xa4\xa7\xe6\xb5\xb7'
bytes ( [ 15 ] ) . decode( ) - - - > 报错:UnicodeDecodeError, unicode 中没有15 这个字符
02 : 使用bin ( ) 函数转化得到, 这是str 字符串, 可以使用str 的方法。
bin ( 15 ) - - - > 0b1111
2、bytes()函数
01 、接收的参数,可以是:
1 、bytes
>> > b
b'\xab\xcd'
>> > bytes ( b)
b'\xab\xcd'
2 、数字( 接收数字表示bytes 数组的大小)
>> > bytes ( 6 )
b'\x00\x00\x00\x00\x00\x00'
3 、列表( 列表元素的是在0 ~ 255 之间的数)
>> > bytes ( [ 1 , 123 ] )
b'\x01{'
4 、字符串
传字符串,需要制定编码
>> > bytes ( '11' , encoding= 'utf-8' )
b'11'
3、十六进制字符串转化为bytes
bytes . fromhex( ) 的参数是 十六进制字符串。
bytes ( [ 16 ] ) 与 bytes . fromhex( '10' ) 等同.
4、bytes转化为十六进制字符串
01 、使用hex ( ) 函数( python3. 5 之后)
>> > b = bytes . fromhex( 'abcd' )
>> > b. hex ( )
'abcd'
>> > b
b'\xab\xcd'
02 、使用字符串格式转化(python3. 4 以下)
>> > b
b'\xab\xcd'
>> > '' . join( [ '%02x' % i for i in b] )
'abcd'
>> > '' . join( [ '%02X' % i for i in b] )
'ABCD'
5、十六进制字符串和int相互转化
01 、十六进制字符串转化int
>> > int ( '10' , 16 )
16
>> > int ( '0x10' , 16 )
16
02 、int 转化为十六进制字符串
>> > hex ( 16 )
'0x10'
6、int和bytes相互转化
01 、int 转bytes
int . to_bytes( 整数, 转化为字节数, 大端( "big" ) 或小端( "little" ) )
1 、例
>> > int . to_bytes( 123 , 3 , 'big' )
b'\x00\x00{'
>> > int . to_bytes( 123 , 3 , 'little' )
b'{\x00\x00'
02 、bytes 转int
int . from_bytes( bytes 数据, 大端( "big" ) 或小端( "little" ) )
1 、例
>> > a = int . to_bytes( 123 , 3 , 'big' )
>> > int . from_bytes( a, 'big' )
123
>> > int . from_bytes( a, 'little' )
8060928
7、二进制字符串和int相互转化
01 、二进制字符串转化为int
>> > bin ( 16 )
'0b10000'
>> > int ( '0b10000' , 2 )
16
02 、int 转化为二进制字符串
>> > bin ( 16 )
'0b10000'