python3字符串与二进制怎么实现互相转换

2021-01-27 10:12发布

2条回答
aijingda
2楼 · 2021-01-27 14:52

字符串转二进制代码:

def encode(s):
 return ' '.join([bin(ord(c)).replace('0b', '') for c in s])
  
def decode(s):
 return ''.join([chr(i) for i in [int(b, 2) for b in s.split(' ')]])
  
>>>encode('hello')
'1101000 1100101 1101100 1101100 1101111'
>>>decode('1101000 1100101 1101100 1101100 1101111')
'hello'

二进制转字符串代码:

>>> bin(int('256', 10))
'0b100000000'
>>> str(int('0b100000000', 2))
'256'


我是大脸猫
3楼 · 2021-01-27 16:27

  1. 数字

  2. 整数 -1 0 1

  3. 浮点 -0.1 0.0 1.0

  4. 二进制 0b11        结果 3

  5. 八进制 0o77        结果 63

  6. 16进制 0xFF        结果 255

  7. 字符串 <class 'str'>

  8.    纯字符串 'str' "str" '''str''' """str"""

  9.    字符串数字(二进制 0b) '0b0'     转成字符 str(0b10) 结果 '2'     ## 可以前置补零str(0b00000010)

  10.    字符串数字(八进制 0o) '0o0'     转换字符 str(0o77) 结果 '63'    ## 可以前置补零str(0o0077)

  11.    字符串数字(十进制)    '0'       转换字符 str(100)  结果 '100'   ## 不能前置补零

  12.    字符串数字(16进制 0x) '0x0'     转换字符 str(0xFF) 结果 '255'   ## 可以前置补零str(0x00FF)

  13. 二进制 <class 'bytes'>

  14.    二进制字节表示 b''    # ASCII 字符 0-9 a-z A-Z

  15. ================================================================================================================================

  16. ## 数字 转 字符串 ##  255(10进制)  0b11(2进制)  0xFF(16进制)

  17. ## (10进制数)

  18. >>> bin(255)            '0b11111111'

  19. >>> oct(255)            '0o377'

  20. >>> hex(255)            '0xff'

  21. ## (2进制数)

  22. >>> bin(0b11)           '0b11'

  23. >>> hex(0xFF)           '0xff'

  24. ## (16进制数)

  25. >>> bin(0xFF)           '0b11111111'

  26. >>> hex(0xFF)           '0xff'

  27. ================================================================================================================================

  28. ## 字符串 转 数字(十进制数)##  '123'(10进制解析)  '10'(2进制解析)  'a'(16进制解析)

  29. ## (10进制表示的字符串)

  30. >>> int('123')          123         ## 十进制字符转十进制数字

  31. >>> int('123',10)       123         ## 默认是十进制

  32. ## (二进制表示的字符串)

  33. >>> int('100',2)        4           ## 二进制的 100 等于 十进制的 4(可以不加前置 0b

  34. >>> int('0b100',2)      4           ## 二进制的 100 等于 十进制的 4

  35. >>> int('0b0100',2)     4           ## 可以前置补零

  36. ## (16进制表示的字符串)

  37. >>> int('a',16)         10          ## 16进制的 a 等于 十进制的 10(可以不加前置 0x

  38. >>> int('0xa',16)       10          ## 16进制的 a 等于 十进制的 10

  39. >>> int('0x0a',16)      10          ## 16进制的 a 等于 十进制的 10(可以前置补零)

  40. >>> int('10',16)        16          ## 16进制的10 等于 十进制的 16(可以不加前置 0x

  41. >>> int('0x10',16)      16          ## 16进制的10 等于 十进制的 16

  42. >>> int('0x0010',16)    16          ## 16进制的10 等于 十进制的 16(可以前置补零)

  43. ================================================================================================================================

  44. ## 数字 转 数字 ##  0b11  0xFF

  45. ## 十进制 转 十进制

  46. >>> int(255)            255         # 无意义操作

  47. >>> 255                 255         # 无意义操作

  48. ## 二进制 转 十进制

  49. >>> int(0b11)           3           # 可加前置零 int(0b0011)

  50. >>> 0b11111111          255         # 等价

  51. ## 16进制 转 十进制

  52. >>> int(0xFF)           255

  53. >>> 0xff                255         # 等价 且 忽略大小写

  54. >>> 0xFF                255         # 等价 且 忽略大小写

  55. ## 十进制 转 二进制(使用 数字 转 字节码/字符)

  56. 255 等价 0b11111111

  57. ## 十进制 转 16进制(使用 数字 转 字节码/字符)

  58. 255 等价 0xff

  59. ================================================================================================================================

  60. ## 字符串 转 字节码 ##

  61. >>> bytes('abc','utf-8')              b'abc'

  62. >>> bytes('编程','utf-8')             b'\xe7\xbc\x96\xe7\xa8\x8b'

  63. >>> bytes('Python3编程','utf-8')      b'Python3\xe7\xbc\x96\xe7\xa8\x8b'

  64. >>> 'Python3编程'.encode('UTF-8')     b'Python3\xe7\xbc\x96\xe7\xa8\x8b'

  65. >>> S = 'Python3编程'                 'Python3编程'

  66. >>> B = bytes(S,'utf-8')              b'Python3\xe7\xbc\x96\xe7\xa8\x8b'

  67. >>> FMT = str(len(B)) + 's'           '13s'

  68. >>> struct.pack(FMT,B)                b'Python3\xe7\xbc\x96\xe7\xa8\x8b'

  69. ## 以16进制数字写的字符串,直接转成一样的字节码(2个16进制字符才是一个字节)

  70. >>> bytes.fromhex('01')               b'\x01'                       # 单字节

  71. >>> bytes.fromhex('0001')             b'\x00\x01'                   # 双字节

  72. >>> bytes.fromhex('aabbccddeeff')     b'\xaa\xbb\xcc\xdd\xee\xff'   # 多字节

  73. ================================================================================================================================

  74. ## 字节码 转 字符串 ##  取出16进制表示的内容

  75. >>> b'abc'.decode('UTF-8')                                  'abc'

  76. >>> b'Python3\xe7\xbc\x96\xe7\xa8\x8b'.decode('UTF-8')      'Python3编程'

  77. >>> b'\xaa\xbb\xcc\xdd\xee\xff'.hex()                       'aabbccddeeff'

  78. >>> b'0'.hex()                                              '30'    ## 字符0在ASCII码上的数字(数字是16进制表示)== 48(十进制)

  79. >>> b'1'.hex()                                              '31'

  80. >>> b'z'.hex()                                              '7a'

  81. ================================================================================================================================

  82. ## 数字 转 字节码(是二进制,用16进制显示) ##

  83. # 10进制数 转 字节码

  84. import struct

  85. >>> struct.pack('B',0)          b'\x00'

  86. >>> struct.pack('B',1)          b'\x01'

  87. >>> struct.pack('B',101)        b'e'                    ## 101 对应 16进制的 0x65(此处返回值是显示为当前整数 101 对应的 ASCII字符 e

  88. >>> struct.pack('B',255)        b'\xff'                 # 无符号最大单字符可以表示的数字

  89. >>> struct.pack('>i',255)       b'\x00\x00\x00\xff'     # 4字节大端表示的数字

  90. >>> struct.pack(',255)       b'\xff\x00\x00\x00'     # 4字节小端表示的数字

  91. # 2进制数 转 字节码

  92. import struct

  93. >>> struct.pack('B',0b11111111)     b'\xff'

  94. >>> struct.pack('>i',0b111)         b'\x00\x00\x00\x07'     # 0b111 等于 7(10进制)

  95. >>> struct.pack('>i',0b1111)        b'\x00\x00\x00\x0f'     # 0b1111 等于 15(10进制)

  96. >>> struct.pack('>i',0b11111)       b'\x00\x00\x00\x1f'     # 0b11111 等于 31(10进制)

  97. # 16进制数 转 字节码

  98. import struct

  99. >>> struct.pack('B',0xff)           b'\xff'

  100. >>> struct.pack('>i',0xfff)         b'\x00\x00\x0f\xff'

  101. ================================================================================================================================

  102. ## 字节码 转 数字 ##

  103. import struct          16进制表现                10进制等值

  104. >>> struct.unpack('B', b'\xff')                      (255,)          # 单字节

  105. >>> struct.unpack('>i', b'\x00\x00\x00\xff')         (255,)          # 4字节,大端模式

  106. >>> struct.unpack(', b'\x00\x00\x00\xff')         (-16777216,)    # 4字节,小端模式

  107. ## 手动 转换

  108. 字节码 -> 字符串

  109. >>> B = b'\xe9'

  110. >>> S = B.hex()

  111. >>> S                                               # 值 'e9'

  112. 字符串(16进制格式)-> 数字(10进制)

  113. >>> int(S,16)                                       # 值 233

  114. ================================================================================================================================

  115. ################################################################################################################################

  116. ################################################################################################################################

  117. ################################################################################################################################

  118. ################################################################################################################################

  119. ################################################################################################################################

  120. ################################################################################################################################

  121. ################################################################################################################################

  122. ################################################################################################################################

  123. ## ASCII 字符 和 数字

  124. 字节    b'\x05'

  125. 字符串   '\x05'

  126. ## 将一个整数 (0-1114111) 转换为 一个字符(整数对应的 ASCII 字符)

  127. ## ValueError: chr() arg not in range(0x110000)

  128. >>> chr(0)                  '\x00'

  129. >>> chr(1)                  '\x01'

  130. >>> chr(97)                 'a'

  131. >>> chr(1114111)            '\U0010ffff'

  132. >>> len(chr(101))           1  # 长度为 1个字符

  133. >>> len(chr(1114111))       1  # 长度为 1个字符

  134. ## 将一个 ASCII字符 转换为 一个整数

  135. >>> ord('\x00')             0

  136. >>> ord('\x01')             1

  137. >>> ord('a')                97

  138. >>> ord('0')                48

  139. >>> ord('1')                49

  140. >>> ord('A')                65

  141. >>> ord('Z')                90

  142. >>> ord('\U0010ffff')       1114111

  143. ################################################################################################################################

  144. ################################################################################################################################

  145. ## ASCII 字符 和 bin(字节)

  146. from binascii import b2a_hex, a2b_hex

  147. >>> a2b_hex('ab')

  148. b'\xab'

  149. >>> b2a_hex(b'ab')

  150. b'6162'

  151. >>> a2b_hex(b'6162')

  152. b'ab'


相关问题推荐

  • 回答 3

    换行。比如,print hello\nworld效果就是helloworld\n就是一个换行符。\是转义的意思,&#39;\n&#39;是换行,&#39;\t&#39;是tab,&#39;\\&#39;是,\ 是在编写程序中句子太长百,人为换行后加上\但print出来是一整行。...

  • 回答 42

    十种常见排序算法一般分为以下几种:(1)非线性时间比较类排序:a. 交换类排序(快速排序、冒泡排序)b. 插入类排序(简单插入排序、希尔排序)c. 选择类排序(简单选择排序、堆排序)d. 归并排序(二路归并排序、多路归并排序)(2)线性时间非比较类排序:...

  • 回答 70
    已采纳

    前景很好,中国正在产业升级,工业机器人和人工智能方面都会是强烈的热点,而且正好是在3~5年以后的时间。难度,肯定高,要求你有创新的思维能力,高数中的微积分、数列等等必须得非常好,软件编程(基础的应用最广泛的语言:C/C++)必须得很好,微电子(数字电...

  • 回答 28

    迭代器与生成器的区别:(1)生成器:生成器本质上就是一个函数,它记住了上一次返回时在函数体中的位置。对生成器函数的第二次(或第n次)调用,跳转到函数上一次挂起的位置。而且记录了程序执行的上下文。生成器不仅记住了它的数据状态,生成器还记住了程序...

  • 回答 9

    python中title( )属于python中字符串函数,返回’标题化‘的字符串,就是单词的开头为大写,其余为小写

  • 回答 6

    第一种解释:代码中的cnt是count的简称,一种电脑计算机内部的数学函数的名字,在Excel办公软件中计算参数列表中的数字项的个数;在数据库( sq| server或者access )中可以用来统计符合条件的数据条数。函数COUNT在计数时,将把数值型的数字计算进去;但是...

  • 回答 1

    head是方法,所以需要取小括号,即dataset.head()显示的则是前5行。data[:, :-1]和data[:, -1]。另外,如果想通过位置取数据,请使用iloc,即dataset.iloc[:, :-1]和dataset.iloc[:, -1],前者表示的是取所有行,但不包括最后一列的数据,结果是个DataFrame。...

  • Python入门简单吗2021-09-23 13:21
    回答 45

    挺简单的,其实课程内容没有我们想象的那么难、像我之前同学,完全零基础,培训了半年,直接出来就工作了,人家还在北京大公司上班,一个月15k,实力老厉害了

  • 回答 4

    Python针对众多的类型,提供了众多的内建函数来处理(内建是相对于导入import来说的,后面学习到包package时,将会介绍),这些内建函数功用在于其往往可对多种类型对象进行类似的操作,即多种类型对象的共有的操作;如果某种操作只对特殊的某一类对象可行,Pyt...

  • 回答 8

     相当于 ... 这里不是注释

  • 回答 4

    还有FIXME

  • 回答 3

    python的两个库:xlrd和xlutils。 xlrd打开excel,但是打开的excel并不能直接写入数据,需要用xlutils主要是复制一份出来,实现后续的写入功能。

  • 回答 8

    单行注释:Python中的单行注释一般是以#开头的,#右边的文字都会被当做解释说明的内容,不会被当做执行的程序。为了保证代码的可读性,一般会在#后面加一两个空格然后在编写解释内容。示例:#  单行注释print(hello world)注释可以放在代码上面也可以放在代...

  • 回答 2

    主要是按行读取,然后就是写出判断逻辑来勘测行是否为注视行,空行,编码行其他的:import linecachefile=open(&#39;3_2.txt&#39;,&#39;r&#39;)linecount=len(file.readlines())linecache.getline(&#39;3_2.txt&#39;,linecount)这样做的过程中发现一个问题,...

  • 回答 4

    或许是里面有没被注释的代码

  • 回答 26

    自学的话要看个人情况,可以先在B站找一下视频看一下

没有解决我的问题,去提问