2

python-ldap によって返されたバイナリ ldap 属性を適切な 16 進表現に変換し、ldap フィルターで使用するために再度戻すにはどうすればよいですか?

4

4 に答える 4

4

16 進文字列との間で変換するタスクについては、組み込みの uuid モジュールを考慮する必要があります。

import uuid


object_guid = 'Igr\xafb\x19ME\xb2P9c\xfb\xa0\xe2w'
guid = uuid.UUID(bytes=object_guid)

# to hex
assert guid.hex == '496772af62194d45b2503963fba0e277'

# to human-readable guid
assert str(guid) == '496772af-6219-4d45-b250-3963fba0e277'

# to bytes
assert guid.bytes == object_guid == 'Igr\xafb\x19ME\xb2P9c\xfb\xa0\xe2w'
于 2015-03-29T02:16:22.797 に答える
2
def guid2hexstring(val):
    s = ['\\%02X' % ord(x) for x in val]
    return ''.join(s)

guid = ldapobject.get('objectGUID', [''])[0] # 'Igr\xafb\x19ME\xb2P9c\xfb\xa0\xe2w'
guid2string(guid).replace("\\", "") # '496772AF62194D45B2503963FBA0E277'

#and back to a value you can use in an ldap search filter

guid = ''.join(['\\%s' % guid[i:i+2] for i in range(0, len(guid), 2)]) # '\\49\\67\\72\\AF\\62\\19\\4D\\45\\B2\\50\\39\\63\\FB\\A0\\E2\\77'

searchfilter = ('(objectGUID=%s)' % guid)
于 2014-08-14T04:28:10.300 に答える