(n, digits=8, format=DEFAULT_FORMAT)
return s
Convert a python number to a number field.
Convert a python number to a number field.
Convert a python number to a number field .
def itn(n, digits=8, format=DEFAULT_FORMAT):
    """Convert a python number to a number field.
    """
    # POSIX 1003.1-1988 requires numbers to be encoded as a string of
    # octal digits followed by a null-byte, this allows values up to
    # (8**(digits-1))-1. GNU tar allows storing numbers greater than
    # that if necessary. A leading 0o200 byte indicates this particular
    # encoding, the following digits-1 bytes are a big-endian
    # representation. This allows values up to (256**(digits-1))-1.
    if 0 <= n < 8 ** (digits - 1):
        s = ("%0*o" % (digits - 1, n)).encode("ascii") + NUL
    else:
        if format != GNU_FORMAT or n >= 256 ** (digits - 1):
            raise ValueError("overflow in number field")

        if n < 0:
            # XXX We mimic GNU tar's behaviour with negative numbers,
            # this could raise OverflowError.
            n = struct.unpack("L", struct.pack("l", n))[0]

        s = bytearray()
        for i in range(digits - 1):
            s.insert(0, n & 0o377)
            n >>= 8
        s.insert(0, 0o200)
    return s
def itn ( n , digits = 8 , format = DEFAULT_FORMAT ) : # POSIX 1003.1-1988 requires numbers to be encoded as a string of # octal digits followed by a null-byte, this allows values up to # (8**(digits-1))-1. GNU tar allows storing numbers greater than # that if necessary. A leading 0o200 byte indicates this particular # encoding, the following digits-1 bytes are a big-endian # representation. This allows values up to (256**(digits-1))-1. if 0 <= n < 8 ** ( digits - 1 ) : s = ( "%0*o" % ( digits - 1 , n ) ) . encode ( "ascii" ) + NUL else : if format != GNU_FORMAT or n >= 256 ** ( digits - 1 ) : raise ValueError ( "overflow in number field" ) if n < 0 : # XXX We mimic GNU tar's behaviour with negative numbers, # this could raise OverflowError. n = struct . unpack ( "L" , struct . pack ( "l" , n ) ) [ 0 ] s = bytearray ( ) for i in range ( digits - 1 ) : s . insert ( 0 , n & 0o377 ) n >>= 8 s . insert ( 0 , 0o200 ) return s