python - 未知格式代码 'x'

标签 python python-3.x

<分区>

我正在用 Python 开发一个程序,所有代码看起来都不错,除了当我从终端运行程序时,我收到以下错误消息:

Traceback (most recent call last):
  File "packetSniffer.py", line 25, in <module>
    main()
  File "packetSniffer.py", line 10, in main
    reciever_mac, sender_mac, ethernetProtocol, data = ethernet_frame(rawData)
  File "packetSniffer.py", line 17, in ethernet_frame
    return getMacAddress(reciever_mac), getMacAddress(sender_mac), socket.htons(protocol), data[14:]
  File "packetSniffer.py", line 21, in getMacAddress
    bytesString = map('{:02x}'.format, bytesAddress)
ValueError: Unknown format code 'x' for object of type 'str'

这是我目前整个程序的代码,有人能帮忙吗?

import struct
import textwrap
import socket

def main():
    connection = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.ntohs(3))

    while True:
        rawData, address = connection.recvfrom(65535)
        reciever_mac, sender_mac, ethernetProtocol, data = ethernet_frame(rawData)
        print('\nEthernet Frame: ')
        print('Destination: {}, Source: {}, Protocol: {}'.format(reciever_mac, sender_mac, ethernetProtocol))

# Unpack ethernet frame
def ethernet_frame(data):
    reciever_mac, sender_mac, protocol = struct.unpack('! 6s 6s H', data[:14])
    return getMacAddress(reciever_mac), getMacAddress(sender_mac), socket.htons(protocol), data[14:]

# Convert the Mac address from the jumbled up form from above into human readable format
def getMacAddress(bytesAddress):
    bytesString = map('{:02x}'.format, bytesAddress)
    macAddress = ':'.join(bytesString).upper()
    return macAddress

main()

最佳答案

在下面的代码部分,format type x 不需要字符串。它接受整数。然后它将整数转换为相应的十六进制形式。

# Convert the Mac address from the jumbled up form from above into human readable format
def getMacAddress(bytesAddress):
    bytesString = map('{:02x}'.format, bytesAddress)
    macAddress = ':'.join(bytesString).upper()

因此,如果您的 bytestAddress 是整数的字符串形式,那么,您可以:

bytesAddress = '123234234'
map('{:02x}'.format, [int(i) for i in bytesAddress])
#map('{:02x}'.format, map(int, bytesAddress)) 
['01', '02', '03', '02', '03', '04', '02', '03', '04']

进一步,如果要将一对整数(字符串形式)处理成十六进制,则首先将`bytesAddress转换为

[bytesAddress[i:i+2] for i in range(0, len(bytesAddress), 2)]

关于python - 未知格式代码 'x',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38451592/

相关文章:

python - 我如何 'install' Google App Engine 上的模块?

python - 如何将查询中设置的page_size设置为分页元数据djangorest框架

python-3.x - 在父类(super class)中缓存属性

python - 正则表达式匹配联合类型的 "|"分隔值

python 3 : Split string under certain condition

python - 更新/合并和更新列 pandas 的子集

python - 使用 OpenCV 为 Tesseract OCR 预处理七段图像

python - PyTorch 的 nn.Conv2d 半精度 (fp16) 比 fp32 慢

python - 无法在 tensorboard 中使用 summary.merge 进行单独的培训和评估摘要

python - 如何在 PyQt5 中更新窗口?