检查十六进制代码类型

2024-10-02 20:37:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字典,里面有从JPEG的EXIF数据中提取的键、值对。对于一些JPEG,我得到了一些奇怪的字符串值,我一直在想如何处理它。我猜它叫做二进制十六进制代码,或者类似的东西,我真的找不到很多信息,这超出了我的正常驾驶室。你知道吗

值如下所示:

>>> components_config
'\x01\x02\x03\x00'

或者这个:

>>> scenetype
'\x01'

其类型为str:

>>> type(components_config)
<type 'str'>

当我尝试使用它时,它想这样显示自己:

>>> for c in components_config:
    print c
[]    # note, these are rectangles (connected on all sides) that
[]    # I can't copy over
[]
[]

我发现我可以让它像这样可读:

>>> binascii.hexlify(components_config)
'01020300'

如果只有一件事:

>>> ord(scenetype)
1

但我一直在思考的问题是如何识别字典中的值是这些值之一还是其他值?字典中有tupleintstring类型。我希望能够将这些值提取出来,并使它们成为ints,但是,我尝试识别它们的所有操作都失败了。举个例子:

>>> components_config.find('\\')
-1

>>> components_config.startswith(r'\x')
False

所以正常的字符串操作在这里不起作用。类型检查只是返回字符串,这没有什么可处理的。是否有其他方法来检查值是否为十六进制类型?你知道吗

谢谢!你知道吗

我用的是2.7,顺便说一句

EDIT:感谢您的回答和评论,但我仍然无法指定何时调用struct方法,或者对这些特定值调用任何其他方法。你知道吗

struct.unpack(HH, var)可以将它转换为我想要的值,但我不能对dict的每个值都调用它,因为我在那里也有常规字符串。我怎么知道当我迭代这个特定的字符串时,它就是我需要调用的struct.unpack()?比如:

if type(var) == 'hex':
    struct.unpack('HH', var)

Tags: 方法字符串config类型字典varhhtype
3条回答

您需要结构模块:

https://docs.python.org/2.7/library/struct.html

This module performs conversions between Python values and C structs represented as Python strings. This can be used in handling binary data stored in files or from network connections, among other sources. It uses Format Strings as compact descriptions of the layout of the C structs and the intended conversion to/from Python values.

我又看了一遍,现在我有办法知道我得到的字符串是否是字节码。我承认这不是万无一失,但这是一个开始:

foos = ['\x01\x02\x03\x00', 'regular string']
for f in foos:
    if ord(f[0]) is 1:
        print f

基本上,十六进制代码的每个部分都是单独索引的,即:

x[0] = '\x01'

由于到目前为止我遇到的所有字符串都是从1开始的,而实际的字符串都不是,所以这个测试似乎可以很好地过滤出结果。 你知道吗

你试过把字符串编码成UTF-8吗

>>> print '\x01\x02\x03\x00'.encode("utf")
☺☻♥

其他评论结果:

>>> import struct
>>> print struct.unpack('HH', '\x01\x02\x03\x00')
(513, 3)

不知道你在看什么数据。 :D个

相关问题 更多 >