Integers to octet strings (I2OSP)
Paul Rubin
http
Tue Jul 13 19:34:15 EDT 2004
Tim Churches <tchur at optushome.com.au> writes:
> What is the most efficient method in Python for converting positive
> integers (including long integers) to octet strings, as per the common
> cryptographic data conversion conversion I2OSP (formal definition can be
> found here: http://rfc.net/rfc2437.html#p6 )? I thought of converting
> the integer to hex with hex() and then converting pairs of the resulting
> hex characters into bytes using int() and then chr(), but this seems a
> bit clunky.
It's ugly but it's quite efficient. Here's how I do it:
================================================================
from binascii import hexlify as hexl, unhexlify as unhexl
# convert numbers to binary strings, and back. The incoming numbers
# can be ints, longs, or mpz's. Their hex representations all look
# different from each other so we have to account for that.
def nstr(n):
h=hex(n)[2:] # remove 0x prefix
if h[-1:]=='L': h=h[:-1] # remove L suffix if present
if len(h)&1: h="0"+h
return unhexl(h)
def strn(s):
return long(hexl(s),16)
More information about the Python-list
mailing list