Exemple #1
0
def Literal(C, is_unicode=False, needs_header=False, explicit_length=None, **kw):
    '''Read a string literal (ASCII/Unicode, with/without header).'''
    from bytecleaver import array_t, array_f, WORD, BYTE
    # Figure out our element type/size and length (if any)
    length = explicit_length

    if needs_header:
        C.skip(-4)
        data_type, byte_length = parse_data_header(C)
        is_unicode = (sizeof_data_type(data_type) == 2)
        length = byte_length / sizeof_data_type(data_type)

    # Read the raw data accordingly
    element = WORD if is_unicode else BYTE
    data = array_f(element, length)(C, **kw) if (length is not None) else array_t(element, 0)(C, **kw)

    # Convert to a string
    return (u''.join(map(unichr, data))) if is_unicode else (''.join(map(chr, data)))
Exemple #2
0
def Identifier(C, **kw):
    '''Get a packed, NUL-terminated Identifier string.'''
    from bytecleaver import array_t, BYTE
    return decode_identifier(array_t(BYTE, 0)(C, **kw))