def process_field(elt, ascii=False):
    """Process a 'field' tag.
    """

    # NOTE: if there is a variable defined in this field and it is different
    # from the default, we could change the value and restart.

    scale = np.uint8(1)
    if elt.get("type") == "bitfield" and not ascii:
        current_type = ">u" + str(int(elt.get("length")) // 8)
        scale = np.dtype(current_type).type(1)
    elif (elt.get("length") is not None):
        if ascii:
            add = 33
        else:
            add = 0
        current_type = "S" + str(int(elt.get("length")) + add)
    else:
        current_type = TYPEC[elt.get("type")]
        try:
            scale = (10 /
                     float(elt.get("scaling-factor", "10").replace("^", "e")))
        except ValueError:
            scale = (10 / np.array(
                elt.get("scaling-factor").replace("^", "e").split(","),
                dtype=np.float))

    return ((elt.get("name"), current_type, scale))
Process a 'field' tag.