精华内容
下载资源
问答
  • Python输出16进制不带0x补零,整数转16进制,字符串转16进制   在开发中,我们偶尔会遇到需要将数据通过控制台打印出来,以检查数据传输的准确性。例如调试服务端刚接到的二进制数据(里面包含很多非可见字符,也...

    Python输出16进制不带0x补零,整数转16进制,字符串转16进制

      在开发中,我们偶尔会遇到需要将数据通过控制台打印出来,以检查数据传输的准确性。例如调试服务端刚接到的二进制数据(里面包含很多非可见字符,也就是ASCii码之外的字节值,或是字节值不是字母和数字的,是一些特殊符号),如物联网的MQTT协议的信息,以及我们自定义的二进制应用协议,而不是基于可见字符或JSON组装的信息流。但我们希望看到的是类似这样的信息“0A 53 49 B7 FC 2E”。

      这些二进制数据如果直接用print()函数打印,则在控制台看到的是以字节值代表的字符形式,看到的很多就是乱码。如果用Python里的hex()函数转一下再依次输出,会在每个前面都带有“0x”字符,并且01会打印成1,看起来就很不整齐,感觉比较乱,并且打印的时候要人为在每个字节后面加入空格才能分开字节。

      经过实践,我们可以通过格式化输出将字节值变成16进制字符后,再用join()函数输出,就可以实现我们要的效果了,想打印字符串的ASCii值也可以,只不过先用ord()函数转一下,下面是我封装的两个函数,分别对应字节类型和字符串类型的输出,调试通过,仅供参考。

    打印字节类型的:

    # 字节列表以16进制格式打印数据
    def print_bytes_hex(data):
        lin = ['%02X' % i for i in data]
        print(" ".join(lin))
    
    # 测试字节列表,这也是网络传输收到的原始类型
    arr = [0x4B, 0x43, 0x09, 0xA1, 0x01, 0x02, 0xAB, 0x4A, 0x43]
    print_bytes_hex(arr)
    
    '''
    控制台输出:
    4B 43 09 A1 01 02 AB 4A 43
    '''
    

    打印字符串类型的:

    # 字符串或字符列表以16进制格式打印数据
    def print_string_hex(data):
        lin = ['%02X' % ord(i) for i in data]
        print(" ".join(lin))
    
    # 测试字符串类型
    arr = 'Work'
    print_string_hex(arr)
    
    '''
    控制台输出:
    57 6F 72 6B
    '''
    

      如果我们是开发物联网的项目,涉及到信令需要与硬件开发人员交流的时候,硬件那边基本都是以16进制描述的,所以在服务端输出格式统一的数据流格式,方便大家交流。

      上面的实现也可以用循环打印(在打印的时候格式化和加空格)实现,但是写起来略显臃肿,但是不用生成新的列表,对瞬间内存占用有利(抱歉,写硬件代码留下的习惯,总是会想到内存占用,因为单片机的资源实在有限)大家可以根据这个自己改进。

    展开全文
  • from binascii import a2b_hex h = '54686520676f6e6520697320676f6e652e' p1 = bytes(h,'utf-8') p2 = a2b_hex(p1) ...h是一段简单的16进制字符,原来的编码格式为“0x00”。 运行效果: ...

    最近学密码学,又学了新方法,把原来的升级一下。

    from binascii import a2b_hex
    
    h = '54686520676f6e6520697320676f6e652e'
    p1 = bytes(h,'utf-8')
    p2 = a2b_hex(p1)
    print(p2.decode())

    h是一段简单的16进制字符串,原来的编码格式为“0x00”。

    运行效果:

    展开全文
  • 16进制字符: int(‘10’, 16) => 16 16进制字符: int(‘0x10’, 16) => 16 字节串转整数: 转义为short型整数: struct.unpack(’<hh’, bytes(b’\x01\x00\x00\x00’)) => (1, 0) 转义为long型整数: ...

    字符串转整数:

    10进制字符串: int(‘10’) => 10
    16进制字符串: int(‘10’, 16) => 16
    16进制字符串: int(‘0x10’, 16) => 16

    字节串转整数:

    转义为short型整数: struct.unpack(’<hh’, bytes(b’\x01\x00\x00\x00’)) => (1, 0)
    转义为long型整数: struct.unpack(’<L’, bytes(b’\x01\x00\x00\x00’)) => (1,)

    整数转字节串:

    转为两个字节: struct.pack(’<HH’, 1,2) => b’\x01\x00\x02\x00’
    转为四个字节: struct.pack(’<LL’, 1,2) => b’\x01\x00\x00\x00\x02\x00\x00\x00’

    字符串转字节串:

    字符串编码为字节码: ‘12abc’.encode(‘ascii’) => b’12abc’
    数字或字符数组: bytes([1,2, ord(‘1’),ord(‘2’)]) => b’\x01\x0212’
    16进制字符串: bytes().fromhex(‘010210’) => b’\x01\x02\x10’
    16进制字符串: bytes(map(ord, ‘\x01\x02\x31\x32’)) => b’\x01\x0212’
    16进制数组: bytes([0x01,0x02,0x31,0x32]) => b’\x01\x0212’

    字节串转字符串:

    字节码解码为字符串: bytes(b’\x31\x32\x61\x62’).decode(‘ascii’) => 12ab
    字节串转16进制表示,夹带ascii: str(bytes(b’\x01\x0212’))[2:-1] => \x01\x0212
    字节串转16进制表示,固定两个字符表示: str(binascii.b2a_hex(b’\x01\x0212’))[2:-1] => 01023132
    字节串转16进制数组: [hex(x) for x in bytes(b’\x01\x0212’)] => [‘0x1’, ‘0x2’, ‘0x31’, ‘0x32’]

    展开全文
  • print('10进制转16进制:',hex(16)) print('10进制转8进制:',oct(12)) print('10进制转2进制:',bin(22)) 字符转整数: print('10进制字符:',int('10')) print('16进制字符:',int('10', 1...

    整数之间的进制转换:
    print('16进制转10进制: ',int('0xe0',base=16))
    print('10进制转16进制:',hex(16))
    print('10进制转8进制:',oct(12))
    print('10进制转2进制:',bin(22))


    字符串转整数:
    print('10进制字符串:',int('10'))
    print('16进制字符串:',int('10', 16))
    print('16进制字符串:',int('0x10', 16))

    展开全文
  • python常用的十进制、16进制、字符串、字节串之间的转换 阅读目录(Content) 整数之间的进制转换: 字符串转整数: 字节串转整数: ...10进制转16进制: hex(16) ==> 0x10 16进制转10进制:...
  • 10进制转16进制: hex(16) ==> 0x10 16进制转10进制: int('0x10', 16) ==> 16 类似的还有oct(), bin() 字符转整数: 10进制字符: int('10') ==> 10 16进制字符: int('10', 16) ==> 16 16...
  • 进行协议解析时,总是会遇到各种...10进制转16进制: hex(16) ==&gt; 0x10 16进制转10进制: int(‘0x10’, 16) ==&gt; 16 类似的还有oct(), bin() 字符转整数: 10进制字符: int(‘10’) ==&gt...
  • 10进制转16进制: hex(16) ==> 0x10 16进制转10进制: int('0x10', 16) ==> 16 类似的还有oct(), bin() 字符转整数: 10进制字符: int('10') ==> 10 16进制字符: int('10', 16) ==> 16 16进制字符...
  • python3 字符、十六进制字符、数字、字节之间的转换字节转16进制的字符串字节转数字16进制字符转数字字符字节字节转字符数字转字节 字节转16进制的字符 ‘S’对应的16进制数是 0X53 字节转数字 ...
  • 将一个十六进制字符解码成一个字节字符或者将一个字节字符编码成一个十六进制字符。 解决方案 有两种方法: 使用 binascii 模块 使用 base64 模块 使用 binascii 模块 import binascii string = b'hello' ...
  • 转自 : ... 进行协议解析时,总是会遇到各种各样的数据转换的问题,从二进制到十进制,从字节串到整数等等 ...10进制转16进制: hex(16) ==> 0x1016进制转10进制: int
  • 什么叫小端,什么叫大端?纯属个人理解,还未深入。 小端即在内存中低位存储的...10进制转16进制: hex(16) ==> 0x10 16进制转10进制: int('0x10', 16) ==> 16 二进制与八进制同理: bin(1) ==> 01 int('...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 130
精华内容 52
关键字:

python转16进制字节串

python 订阅