func StrToUint(inputType *abi.Type, input string) (interface{}, error) {
	val := big.NewInt(0)
	val, success := val.SetString(input, 10)
	if !success {
		return nil, fmt.Errorf("invalid unsigned integer %s", input)
	}
	if val.Cmp(_zero) < 0 {
		return nil, fmt.Errorf("invalid unsigned integer %s", input)
	}
	switch inputType.Size {
	case 8:
		return uint8(val.Uint64()), nil
	case 16:
		return uint16(val.Uint64()), nil
	case 32:
		return uint32(val.Uint64()), nil
	case 64:
		return val.Uint64(), nil
	case 256:
		return val, nil
	default:
		return nil, fmt.Errorf("unexpected int size %d", inputType.Size)
	}
}
StrToUint turns a string in to a uint type as given by the ABI information.
It can return various types so return interface{}
package funcparser
import (
	"encoding/hex"
	"fmt"
	"math/big"
	"reflect"
	"strings"
	"unsafe"
	"github.com/ethereum/go-ethereum/accounts/abi"
	"github.com/ethereum/go-ethereum/common"
)
func StrTo(inputType *abi.Type, input string) (interface{}, error) {
	switch inputType.T {
	case abi.IntTy:
		return StrToInt(inputType, input)
	case abi.UintTy:
		return StrToUint(inputType, input)
	case abi.StringTy:
		return StrToStr(inputType, input)
	case abi.BoolTy:
		return StrToBool(inputType, input)
	case abi.AddressTy:
		return StrToAddress(inputType, input)
	case abi.HashTy:
		return StrToHash(inputType, input)
	case abi.BytesTy, abi.FixedBytesTy:
		return StrToBytes(inputType, input)
	default:
		return nil, fmt.Errorf("unhandled type %v", inputType)
	}
}
func StrToInt(inputType *abi.Type, input string) (interface{}, error) {
	val := big.NewInt(0)
	val, success := val.SetString(input, 10)
	if !success {
		return nil, fmt.Errorf("invalid integer %s", input)
	}
	switch inputType.Size {
	case 8:
		return int8(val.Int64()), nil
	case 16:
		return int16(val.Int64()), nil
	case 32:
		return int32(val.Int64()), nil
	case 64:
		return val.Int64(), nil
	case 256:
		return val, nil
	default:
		return nil, fmt.Errorf("unexpected int size %d", inputType.Size)
	}
}
var _zero = big.NewInt(0)